安装Docker Windows Server 2019:术语';码头工人';无法识别为cmdlet、函数、脚本文件或可操作程序的名称

安装Docker Windows Server 2019:术语';码头工人';无法识别为cmdlet、函数、脚本文件或可操作程序的名称,docker,windows-server-2019,Docker,Windows Server 2019,正在尝试在Windows Server 2019及以下版本上以进程隔离方式安装Docker。(我无法在此服务器上使用Hyper-V)在管理模式下运行PowerShell时 然而,我得到了错误 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

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

然而,我得到了错误

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
Get-PackageProvider:找不到与参数名称“ListAvailableget-packagesource”匹配的参数

我还尝试了
Install Package-Name docker-ProviderName dockermstftprovider
然后我得到:

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的一些防病毒/防病毒软件。对我来说,反恶意软件已经被禁用,所以我还必须禁用实时病毒保护

然后我就可以跑了

安装模块-名称dockermstfprovider-存储库PSGallery-Force

现在通过
getpackageprovider-listavable
我看到
dockermstftprovider
已安装

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 dockermstftprovider
并输入了
Y

然后运行
Get Package-Name Docker-ProviderName dockermstftprovider
并获取:

Name                           Version          Source                           ProviderName
----                           -------          ------                           ------------
docker                         20.10.0          DockerDefault                    DockerMsftProvider
当我运行
Install Package-Name docker-ProviderName dockermstftprovider
时,我没有通过PowerShell获得任何反馈,也没有错误,所以我认为这很好

但是,当我和docker运行时--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,因此我将其卸载。 我不确定这是来自那个安装还是新安装,但我将path
C:\Program Files\Docker
添加到了我的环境
path
变量中

我还是犯了同样的错误

术语“docker”不能识别为cmdlet、函数、脚本文件或可操作程序的名称

更新2

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

更新3
我在PowerShell中选中了
($env:path).Split(;”)
,Docker路径在那里:


如何安装Docker?

我使用脚本安装容器功能并卸载Windows Defender(注意,这对您的环境可能安全,也可能不安全):

我提到这一点的情况下,它的一个选择,只是重置机器,如果没有其他工作

我认为您的第一个问题是
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路径移到更靠近路径起点的位置,您应该能够得到永久修复。

谢谢!我测试了环境设置:如果我运行
($env:path).Split(;”)
我会看到“C:\Program Files\Docker”是Docker的唯一路径引用。我使用了
cmd
,导航到文件夹“C:\Program Files\Docker”并运行
Docker--version
我看到了“Docker版本20.10.0,构建6ee42dc”。我不确定是否仍然需要尝试您的脚本,因为环境似乎设置正确?如果没有,我还可以尝试什么?该脚本在新服务器2019实例上对我有效。看到正确的
docker--version
表示docker安装正常。我可以通过运行
$env:path=“:C:\Program Files\Docker”
然后尝试运行Docker(注意:开始时字符无效)来重现您得到的错误。如果然后运行
$env:path=“C:\Program Files\Docker”
,Powershell可以找到Docker,因此我认为问题出在path变量上。啊,好的,所以我不需要尝试该脚本,因为安装已成功完成。请参阅我的更新2,其中我仔细检查了path变量。如果您尝试了我上面建议的
$env:path
设置,则不清楚,我认为这应该表明问题出在powershell中的“有效路径”。我添加了更新3以获得powershell中的路径(根据您的建议),这似乎是正常的。我看不出你在回答中为PowerShell设置了什么路径?