尝试在 Windows Server 2019 上以进程隔离方式安装 Docker 并遵循 these steps . (我无法在此服务器上使用 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像这样不受限制(我会把它设置回 Restricted Set-ExecutionPolicy -ExecutionPolicy Restricted
之后):
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
我还必须暂时禁用一些防病毒软件/malware protection来自 Windows Defender。对我来说,反恶意软件已经被禁用,所以我还必须禁用实时病毒防护。
然后我就可以跑了
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 的脚本(注意这对您的环境可能安全也可能不安全):
$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
步骤中的复制/粘贴错误。
您列出的文件是最新 DockerEE 版本的正确文件。
如果您直接从那里运行 docker,例如&"C:\Program Files\Docker\docker.exe"--version
并且它不起作用,然后是路径以外的环境问题 - 尝试重新安装 Docker。
如果您重新启动 Powershell 并运行 ($env:path).Split(";")
,唯一的 Docker 条目应该是 C:\Program Files\Docker
- 也许有一些来自 Docker Desktop 的残留物干扰?
[编辑]
系统路径似乎以微妙的方式损坏(尽管 docker 路径存在且正确)。
我认为如果您仔细检查路径配置和/或将 docker 路径移动到更靠近路径开头的位置,您应该能够获得永久修复。
关于docker - 安装Docker Windows Server 2019 : the term 'docker' is not recognized as the name of a cmdlet, 函数、脚本文件或可运行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67009080/