安装 Docker Windows Server 2019:术语“docker”不被识别为 cmdlet、函数、脚本文件或可操作程序的名称

2023-12-02

尝试在 Windows Server 2019 及以下版本上以进程隔离方式安装 Docker这些步骤。 (我无法在此服务器上使用 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

UPDATE 1

我必须设置 PowerShell执行政策像这样不受限制(我将其设置回受限制Set-ExecutionPolicy -ExecutionPolicy Restricted毕竟这):

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

我还不得不暂时禁用一些防病毒软件/恶意软件防护来自 Windows Defender。对我来说,反恶意软件已经被禁用,所以我还必须禁用实时病毒防护。

然后我就可以跑了

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

Now via 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

I ran 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多变的。

enter image description here

我仍然遇到同样的错误

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

UPDATE 2

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

enter image description here

UPDATE 3
I checked ($env:path).Split(";") in PowerShell and the Docker path is there: 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 step.

您列出的文件是最新 DockerEE 版本的正确文件。

如果您直接从那里运行 docker,例如&"C:\Program Files\Docker\docker.exe" --version并且不起作用,则存在路径以外的环境问题 - 尝试重新安装 Docker。

如果您重新启动 Powershell 并运行($env:path).Split(";"),唯一的 Docker 条目应该是C:\Program Files\Docker- 也许 Docker Desktop 的一些残留物会干扰?

[Edit]

系统路径似乎以微妙的方式被损坏(尽管 docker 路径存在且正确)。

我认为如果您仔细检查路径配置和/或将 docker 路径移至靠近路径开头的位置,您应该能够获得永久修复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安装 Docker Windows Server 2019:术语“docker”不被识别为 cmdlet、函数、脚本文件或可操作程序的名称 的相关文章

随机推荐

  • 更改要在 R Shiny 中绘制的变量时,防止重置绘图选定的迹线

    我正在尝试制作一个闪亮的应用程序 它由侧边栏面板和绘图组成 在面板中 我使用单选按钮来选择应绘制哪个 ID 我还有多个变量 用户可以使用情节图例关闭和打开这些变量 我希望应用程序首次打开时绘图为空 为此 我正在使用visible legen
  • 使用值列表初始化模板数组

    在标准 C 中我们可以这样写 int myArray 5 12 54 95 1 56 我想用模板写同样的东西 Array
  • 从源代码动态创建编译的.NET exe?

    我需要将自定义的 唯一的静态字符串注入到基于 NET 的 EXE 中 出于所有意图和目的 假设这是我的 PKI 私钥 我对如何保护 C 源代码中的私钥有一些想法 我的问题是如何获取 CS 文件并基于它创建可执行文件 看一眼CSharpCod
  • 如何增加 Worklight Server 中的 Java 堆空间?

    尝试部署 Android 应用程序时 我在 Worklight 中收到 JVM 堆空间错误 Failed to deploy the application to Worklight server InputStream error jav
  • Sidekiq 在每个时区的特定时间执行

    使用Sidekiq 让它在每个时区的特定时间执行的策略是什么 例如 我需要 Sidekiq 每天在世界各地的以下时间和时区执行任务 8 00 PM EST 8 00 PM CST 8 00 PM MST 8 00 PM PST 我会在开始时
  • Ruby 文件读取并行性

    我有一个包含很多行的文件 比如 10 亿行 脚本会迭代所有这些行 将它们与另一个数据集进行比较 由于目前它在 1 个线程 1 个核心上运行 我想知道是否可以启动多个分支 每个分支同时处理文件的一部分 到目前为止我想到的唯一解决方案是sedU
  • 批处理文件删除除最新的 10 个文件之外的所有文件

    我在批处理文件中有以下内容 REMOLDFILES ECHO Removing files older than 14 days gt gt LOGFILE cd d BKUPDIR FOR f skip 14 delims A IN DI
  • 为什么 Chrome 中 onchange 先于 onclick 触发?

    我仍然会利用这个社区的专业知识和可用性 我的问题是 为什么如果我们有类似的代码
  • 如何从它所在的所有表中选择一个列?

    我有许多具有相同列 customer number 的表 我可以通过查询获取所有这些表的列表 SELECT table name FROM ALL TAB COLUMNS WHERE COLUMN NAME customer number
  • 编写 $.cookie 以在多表单页面提交时显示表单

    使用 cookie 编写一个页面 以便在多表单页面提交时显示表单 我看到类似的问题在涉及到这个特定代码时没有得到解答 我读了又读 似乎这应该可行 是的 jquery 很新 1 周 我有容器 div 类 每个容器都有一个 p 切换来显示 隐藏
  • 使用 for 表达式从可能为空的 JSON 值中提取选项

    我有一个 JSON 文档 其中某些值可以为空 在 json4s 中使用 for 表达式 我如何能够产生 None 而不是什么也不产生 当任一字段的值相同时 以下内容将无法产生FormattedID or PlanEstimate is nu
  • 升压::正则表达式_替换

    目前我在 boost regex 方面遇到问题 我需要找到合适的单词 替换 与相应的词 我的代码现在看起来像这样 std string name ptap std string name regex b name b boost regex
  • 如何使用 awk 重命名重复行?

    我有一个包含 100 万行的文件 其中一些行是重复的 我想通过附加 variant 一个数字来重命名重复的行 该文件的格式如下 I am a test line She is beautiful need for speed Nice da
  • java 类文件中的泛型类型存储在哪里?

    我很清楚 编译 Java 代码时泛型类型会被删除 1 5 JVM 使用哪些信息 属性 来实现getGenericType ETC 它们存储在Signature属性 参见第 4 8 8 节更新了 Java 虚拟机规范 以及第 4 4 4 节关
  • html中变量前面的点表示什么?

    总的来说 我对 html 和 web 编码很陌生 下面的代码中变量前面的句点表示什么 JS code Thanks 这些不是变量 这些是 CSS 选择器 它们代表每个示例中具有该类的 HTML 节点 div class page title
  • Python 变长嵌套循环

    我试图在 python 中嵌套一个可变长度的 for 循环 并且能够重用这些变量 for i in range 0 256 for j in range 0 256 for k in range 0 256 myvar i j k 在上面的
  • 删除id最大的地方

    我想删除 order id 最大的行 我尝试了以下方法 DELETE FROM orders WHERE MAX order id 但这是错误的 还有其他想法吗 感谢您的时间 第一个想法 以及许多其他完全相同的想法 DELETE FROM
  • UML 类图中的 Java 服务器页面 (.JSP) 文件

    我正在为即将开始的项目编写设计 我想知道应该如何在我创建的 UML 类图中表示视图 jsp 文件 由于 jsp 文件不是类 它们适合放在这里吗 我认为不会 因为这是一个类图 但我不确定我应该如何表示这些 有什么想法吗 JSP 文件被认为是视
  • 安全 getElementById 或尝试确定 GUI 中是否存在 ID

    Method UiInstance getElementById ID 总是返回GenericWidget对象 即使 ID 不存在 有什么方法可以找出我的应用程序中不存在返回的对象 或者检查 UI 是否包含具有给定 ID 的对象 使用 GU
  • 安装 Docker Windows Server 2019:术语“docker”不被识别为 cmdlet、函数、脚本文件或可操作程序的名称

    尝试在 Windows Server 2019 及以下版本上以进程隔离方式安装 Docker这些步骤 我无法在此服务器上使用 Hyper V 在管理模式下运行 PowerShell 时 然而我得到了错误 Get PackageProvide