安装 Docker Windows Server 2019:术语 'docker' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称
Install Docker Windows Server 2019: the term 'docker' is not recognized as the name of a cmdlet, function, script file, or operable program
尝试在 Windows Server 2019 及以下 these steps 上以进程隔离方式安装 Docker。 (我无法在此服务器上使用 Hyper-V)当 运行在管理员模式下使用 PowerShell。
但是我得到了错误
Get-PackageProvider : A parameter cannot be found that matches parameter name 'ListAvailableget-packagesource'
我也试过了Install-Package -Name docker -ProviderName DockerMsftProvider
然后我得到:
Install-Package : Unable to find package providers (DockerMsftProvider).
At line:1 char:1
+ Install-Package -Name docker -ProviderName DockerMsftProvider
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], E
xception
+ FullyQualifiedErrorId : UnknownProviders,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
Install-Package : Unable to find package providers (DockerMsftProvider).
At line:3 char:1
+ Install-Package -Name docker -ProviderName DockerMsftProvider
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], E
xception
+ FullyQualifiedErrorId : UnknownProviders,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
更新 1
我不得不像这样将 PowerShell execution policy 设置为不受限制(在所有这些之后我将其设置回受限 Set-ExecutionPolicy -ExecutionPolicy Restricted
):
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
我还不得不暂时禁用 Windows Defender 中的某些防病毒软件/malware protection。对我来说,反恶意软件已经被禁用,所以我还必须禁用实时病毒防护。
然后我可以运行
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
现在通过 Get-PackageProvider -ListAvailable
我看到 DockerMsftProvider
已安装。
Name Version DynamicOptions
---- ------- --------------
DockerMsftProvider 1.0.0.8 Update
msi 3.0.0.0 AdditionalArguments
msu 3.0.0.0
NuGet 2.8.5.208 Destination, ExcludeVersion, Scope, SkipDependencies, Headers, FilterOnTag...
PowerShellGet 1.0.0.1 PackageManagementProvider, Type, Scope, AllowClobber, SkipPublisherCheck, ...
Programs 3.0.0.0 IncludeWindowsInstaller, IncludeSystemComponent
我运行Install-Package -Name docker -ProviderName DockerMsftProvider
然后输入Y
.
然后我 运行 Get-Package -Name Docker -ProviderName DockerMsftProvider
得到:
Name Version Source ProviderName
---- ------- ------ ------------
docker 20.10.0 DockerDefault DockerMsftProvider
当我 运行 Install-Package -Name docker -ProviderName DockerMsftProvider
我没有通过 PowerShell 得到反馈,没有错误,所以我认为它很好。
然而,当我 checked here 和 运行 docker run --isolation=process mcr.microsoft.com/windows/nanoserver:1809 cmd.exe /c ping 127.0.0.1 -t
我收到错误
docker : The term 'docker' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ docker run --isolation=process mcr.microsoft.com/windows/nanoserver:1 ...
+ ~~~~~~
+ CategoryInfo : ObjectNotFound: (docker:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
过去我曾尝试安装 Docker Desktop,但后来我将其卸载,因为我的 VPS 不支持 Hyper-V。
我不确定这是否仍然来自该安装或新安装,但我将路径 C:\Program Files\Docker
添加到我的环境 PATH
变量中。
我仍然得到同样的错误
The term 'docker' is not recognized as the name of a cmdlet, function, script file, or operable program.
更新 2
根据@Peter Wishart 的回答,我检查了我的 PATH
系统变量,但是可以在那里看到 Docker(见下面的截图),正如 Peter 也提到的,因为我可以 运行 docker --version
通过命令提示符(不是 PowerShell)安装成功完成。
更新 3
我在 PowerShell 中检查了 ($env:path).Split(";")
并且 Docker 路径在那里:
如何安装 Docker?
我使用脚本安装容器功能并卸载 Windows Defender(n.b。这对您的环境可能安全也可能不安全):
$rebootNeeded = $false
if (-not (Get-WindowsFeature Containers).Installed) {
$rebootNeeded = $rebootNeeded -or (Install-WindowsFeature -Name Containers).RestartNeeded
}
if ((Get-WindowsFeature Windows-Defender).Installed) {
$rebootNeeded = $rebootNeeded -or (Uninstall-WindowsFeature Windows-Defender).RestartNeeded
}
if ($rebootNeeded) { throw "Reboot then rerun to complete docker installation" }
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider -Force
Start-Service docker
docker --version
我提到这一点是为了在没有其他工作时可以选择重置机器...
我认为您的第一个问题是 Get-PackageProvider
步骤中的 copy/paste 错误。
您列出的文件是最新 DockerEE 版本的正确文件。
如果您直接从那里 运行 docker,例如&"C:\Program Files\Docker\docker.exe" --version
并且它不起作用,然后是路径以外的环境问题 - 尝试重新安装 Docker。
如果您重新启动 Powershell 和 运行 ($env:path).Split(";")
,唯一的 Docker 条目应该是 C:\Program Files\Docker
- 也许有一些来自 Docker 桌面干扰的残留物?
[编辑]
系统路径似乎以一种微妙的方式损坏了(尽管 docker 路径存在且正确)。
我认为如果您仔细检查路径配置and/or 将 docker 路径移动到更靠近路径起点的位置,您应该能够获得永久修复。
尝试在 Windows Server 2019 及以下 these steps 上以进程隔离方式安装 Docker。 (我无法在此服务器上使用 Hyper-V)当 运行在管理员模式下使用 PowerShell。
但是我得到了错误
Get-PackageProvider : A parameter cannot be found that matches parameter name 'ListAvailableget-packagesource'
我也试过了Install-Package -Name docker -ProviderName DockerMsftProvider
然后我得到:
Install-Package : Unable to find package providers (DockerMsftProvider).
At line:1 char:1
+ Install-Package -Name docker -ProviderName DockerMsftProvider
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], E
xception
+ FullyQualifiedErrorId : UnknownProviders,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
Install-Package : Unable to find package providers (DockerMsftProvider).
At line:3 char:1
+ Install-Package -Name docker -ProviderName DockerMsftProvider
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], E
xception
+ FullyQualifiedErrorId : UnknownProviders,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
更新 1
我不得不像这样将 PowerShell execution policy 设置为不受限制(在所有这些之后我将其设置回受限 Set-ExecutionPolicy -ExecutionPolicy Restricted
):
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
我还不得不暂时禁用 Windows Defender 中的某些防病毒软件/malware protection。对我来说,反恶意软件已经被禁用,所以我还必须禁用实时病毒防护。
然后我可以运行
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
现在通过 Get-PackageProvider -ListAvailable
我看到 DockerMsftProvider
已安装。
Name Version DynamicOptions
---- ------- --------------
DockerMsftProvider 1.0.0.8 Update
msi 3.0.0.0 AdditionalArguments
msu 3.0.0.0
NuGet 2.8.5.208 Destination, ExcludeVersion, Scope, SkipDependencies, Headers, FilterOnTag...
PowerShellGet 1.0.0.1 PackageManagementProvider, Type, Scope, AllowClobber, SkipPublisherCheck, ...
Programs 3.0.0.0 IncludeWindowsInstaller, IncludeSystemComponent
我运行Install-Package -Name docker -ProviderName DockerMsftProvider
然后输入Y
.
然后我 运行 Get-Package -Name Docker -ProviderName DockerMsftProvider
得到:
Name Version Source ProviderName
---- ------- ------ ------------
docker 20.10.0 DockerDefault DockerMsftProvider
当我 运行 Install-Package -Name docker -ProviderName DockerMsftProvider
我没有通过 PowerShell 得到反馈,没有错误,所以我认为它很好。
然而,当我 checked here 和 运行 docker run --isolation=process mcr.microsoft.com/windows/nanoserver:1809 cmd.exe /c ping 127.0.0.1 -t
我收到错误
docker : The term 'docker' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ docker run --isolation=process mcr.microsoft.com/windows/nanoserver:1 ...
+ ~~~~~~
+ CategoryInfo : ObjectNotFound: (docker:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
过去我曾尝试安装 Docker Desktop,但后来我将其卸载,因为我的 VPS 不支持 Hyper-V。
我不确定这是否仍然来自该安装或新安装,但我将路径 C:\Program Files\Docker
添加到我的环境 PATH
变量中。
我仍然得到同样的错误
The term 'docker' is not recognized as the name of a cmdlet, function, script file, or operable program.
更新 2
根据@Peter Wishart 的回答,我检查了我的 PATH
系统变量,但是可以在那里看到 Docker(见下面的截图),正如 Peter 也提到的,因为我可以 运行 docker --version
通过命令提示符(不是 PowerShell)安装成功完成。
更新 3
我在 PowerShell 中检查了 ($env:path).Split(";")
并且 Docker 路径在那里:
如何安装 Docker?
我使用脚本安装容器功能并卸载 Windows Defender(n.b。这对您的环境可能安全也可能不安全):
$rebootNeeded = $false
if (-not (Get-WindowsFeature Containers).Installed) {
$rebootNeeded = $rebootNeeded -or (Install-WindowsFeature -Name Containers).RestartNeeded
}
if ((Get-WindowsFeature Windows-Defender).Installed) {
$rebootNeeded = $rebootNeeded -or (Uninstall-WindowsFeature Windows-Defender).RestartNeeded
}
if ($rebootNeeded) { throw "Reboot then rerun to complete docker installation" }
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider -Force
Start-Service docker
docker --version
我提到这一点是为了在没有其他工作时可以选择重置机器...
我认为您的第一个问题是 Get-PackageProvider
步骤中的 copy/paste 错误。
您列出的文件是最新 DockerEE 版本的正确文件。
如果您直接从那里 运行 docker,例如&"C:\Program Files\Docker\docker.exe" --version
并且它不起作用,然后是路径以外的环境问题 - 尝试重新安装 Docker。
如果您重新启动 Powershell 和 运行 ($env:path).Split(";")
,唯一的 Docker 条目应该是 C:\Program Files\Docker
- 也许有一些来自 Docker 桌面干扰的残留物?
[编辑]
系统路径似乎以一种微妙的方式损坏了(尽管 docker 路径存在且正确)。
我认为如果您仔细检查路径配置and/or 将 docker 路径移动到更靠近路径起点的位置,您应该能够获得永久修复。