docker - 安装Docker Windows Server 2019 : the term 'docker' is not recognized as the name of a cmdlet, 函数、脚本文件或可运行程序

标签 docker windows-server-2019

尝试在 Windows Server 2019 上以进程隔离方式安装 Docker 并遵循 these steps . (我无法在此服务器上使用 Hyper-V)在管理模式下运行 PowerShell 时。

但是我得到了错误

Get-PackageProvider : A parameter cannot be found that matches parameter name 'ListAvailableget-packagesource' enter image description here

我也试过 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 变量中。

enter image description here

我仍然得到同样的错误

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)安装成功完成。

enter image description here

更新 3
我在 PowerShell 中检查了 ($env:path).Split(";") 并且 Docker 路径在那里: enter image description here

如何安装 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/

相关文章:

amazon-web-services - AWS ACM - 由于证书颁发机构身份验证 (CAA) 错误,一个或多个域名验证失败

ubuntu - Docker 在输出中缺少层 ID

docker - 从主机连接 Docker 容器内的 webpack-dev-server

docker - Docker中的Scylla计数器支持

docker - Docker 容器卷在没有运行的情况下如何工作?

opencv - 如何在 docker (debian :jessie)) 上为 python3.5 安装 openCV

docker - 如何在Windows上为Docker EE构建Docker-in-Docker镜像?

docker - 如何在安装了 Docker 企业版 (EE) 的 Windows Server 2019 机器上安装 Docker Compose?