首页 > 解决方案 > 安装 Docker Windows Server 2019:术语“docker”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称

问题描述

尝试在 Windows Server 2019 上以进程隔离方式安装 Docker 并按照以下步骤操作。(我不能在此服务器上使用 Hyper-V)在管理员模式下运行 PowerShell 时。

但是我得到了错误

Get-PackageProvider:找不到与参数名称“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执行策略设置为不受限制(我将在这一切之后将其设置回限制Set-ExecutionPolicy -ExecutionPolicy Restricted):

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

我还不得不暂时禁用 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 得到任何反馈,也没有错误,所以我认为这很好。

但是,当我在这里检查并运行时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变量的路径。

在此处输入图像描述

我仍然得到同样的错误

术语“docker”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。

更新 2

根据@Peter Wishart 的回答,我检查了我的PATH系统变量,但在那里可以看到 Docker(见下面的屏幕截图),正如 Peter 也提到的,因为我可以docker --version通过命令提示符(而不是 PowerShell)运行安装成功完成。

在此处输入图像描述

更新 3
我签($env:path).Split(";")入了 PowerShell 并且 Docker 路径在那里: 在此处输入图像描述

如何安装 Docker?

标签: dockerwindows-server-2019

解决方案


我使用了一个脚本来安装容器功能并卸载 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 路径移动到更靠近路径开头的位置,您应该能够获得永久修复。


推荐阅读