【问题标题】:Docker: "no matching manifest for windows/amd64 in the manifest list entries"Docker:“清单列表条目中没有与 windows/amd64 匹配的清单”
【发布时间】:2018-06-12 12:21:17
【问题描述】:

我在 Windows 上使用 Docker,当我尝试使用此命令提取 PHP 映像时

$ docker pull php

我收到了这条消息:

Using default tag: latest
latest: Pulling from library/php no matching manifest for windows/amd64 
        in the manifest list entries

我该如何解决这个问题?

【问题讨论】:

  • 为了帮助其他人,我在为 linux 创建镜像作为基本操作系统时遇到了这个错误。这个错误的原因是它是为 windows 容器设置的,所以我切换到 Linux 容器然后它开始了工作...
  • 另外,为了后代:我得到了这个构建一个 Windows 容器。即使我切换到 Windows,它似乎已经切换回 Linux。将它改回 Windows 解决了这个问题。

标签: docker


【解决方案1】:

版本:Windows 10

第 1 步:右键单击 Docker 实例并转到设置

第 2 步:从基本到高级并设置“实验性”:true

第 3 步:重启 Docker

步骤4:安装dockerfile成功(例如:docker build -t williehao/cheers2019。)

【讨论】:

  • 这个解决方案解决了我的问题。我尝试了其他方法但失败了。
【解决方案2】:

我在开始学习docker的时候遇到了这个错误,我对这个场景的理解如下:

您遇到此问题的原因: 因为您指的是基于 Linux 的映像,并且您当前正在使用基于 windows 的平台来运行/构建 docker 映像。

分辨率: 简短回答:将您当前的平台切换到 Linux 模式或拉取基于 Windows 的图像。 以下是可能的选项列表:

  1. 切换到 Linux 容器,因为错误是“no matching manifest for windows/amd64
  2. 将 docker 环境设置为“实验性”:true。
  3. 拉取特定于平台的图像 例如docker pull --platform {linux/Windows} {image-name}

【讨论】:

    【解决方案3】:

    这只是在我升级 Docker Desktop(之前配置了 WSL2 集成)后发生在我身上。

    如果您在升级后遇到此问题,仅供参考,我必须执行以下操作:

    以管理员(提升)模式运行 PowerShell 并执行以下命令:

    cd "C:\Program Files\Docker\Docker"
    ./DockerCli.exe -SwitchDaemon
    

    如果您不这样做,您可能无法打开 Docker 桌面上的“设置”选项卡。

    然后,您需要在设置中切换到 Linux Containers(通过取消选中“使用基于 WSL2 的引擎”),然后重新启动。

    此时,只需运行一个快速测试,下载一个图像并在其上运行一个容器,看看是否能解决问题:

    docker run --rm -ti alpine:latest uname -a
    Linux 2b08b155a042 5.4.72-microsoft-standard-WSL2 #1 SMP Wed Oct 28 23:40:43 UTC 2020 x86_64 Linux
    

    从那里开始,如果您使用 WSL2 集成运行,只需返回设置屏幕并撤消我们在第二步中所做的选择(这将重新启动 docker。)

    此时,您将看到升级前的所有映像和已停止的容器。

    【讨论】:

      【解决方案4】:

      Windows 10 20H2 更新

      1. 转到 Docker 配置
      2. 转到 Docker 引擎选项卡
      3. 将行 "experimental": false 更改为 "experimental": true
      4. 使用Apply & Restart 按钮重新启动 Docker


      您也可以手动修改配置文件,用您喜欢的代码编辑器打开它(可视化代码,Notepad++...),例如: p>

      # BACKUP Your file with PowerShell
      Copy-Item -Path C:\ProgramData\Docker\config\daemon.json -Destination C:\ProgramData\Docker\config\daemon.json.backup
      
      # Open the file with Visual Code
      code Copy-Item -Path C:\ProgramData\Docker\config\daemon.json
      

      或者直接用Powershell改字符串

      # Set Path in variable
      $FILE = "C:\ProgramData\Docker\config\daemon.json"
      
      # Replace '"experimental": false' to '"experimental": true'
      (Get-Content -Path $FILE) -replace '"experimental": false','"experimental": true' | Set-Content -Path $FILE
      
      # Check the file content
      type $FILE
      

      输出示例

      PS C:\WINDOWS\system32> type $FILE
      {
        "registry-mirrors": [],
        "insecure-registries": [],
        "debug": false,
        "experimental": true
      }
      

      在你需要重启 Docker 守护进程之后

      PS C:\WINDOWS\system32> Restart-Service docker
      

      检查服务状态

      PS C:\WINDOWS\system32> Get-Service docker
      Status   Name               DisplayName
      ------   ----               -----------
      Running  docker             Docker Engine
      

      【讨论】:

        【解决方案5】:

        在 Docker 中:

        1. 转到设置
        2. 转到 Docker 引擎
        3. experimental 更改为 true
        4. 应用并重新启动

        .

        【讨论】:

          【解决方案6】:

          我在 Windows 10 中通过在管理员 Powershell 中运行解决了这个问题:

          cd "C:\Program Files\Docker\Docker"
          

          然后:

          ./DockerCli.exe -SwitchDaemon
          

          【讨论】:

          • 这也可以通过右键单击 Docker 桌面图标并根据需要选择 Switch to Windows Containers / Switch to Linux Containers 来完成。注意:如果您安装的 Windows 映像在您的 Windows 主机版本之前,您仍然会遇到问题(例如,请参阅操作系统版本列:hub.docker.com/_/microsoft-windows
          【解决方案7】:

          就我而言,我必须先更新窗口,然后问题就解决了。

          【讨论】:

          • 是的!如果您的 Windows 版本已停止服务,您将收到此错误消息。运行更新即可解决!
          【解决方案8】:

          对我来说,这是因为拒绝访问 C:\ProgramData\Docker\config\daemon.json 在我修复它之后它现在可以工作了。 您可以尝试切换到 Linux 容器并切换回来。如果切换没有问题,则使用访问权限。

          【讨论】:

            【解决方案9】:

            弃用“最新”标签

            我们将在所有 Windows 基础映像中弃用“最新”标签,以鼓励更好的容器实践。 2019 年初,我们将不再发布标签;我们将从可用标签列表中拉出它。

            我们强烈鼓励您改为声明您希望在生产中运行的特定容器标签。 “最新”标签与特定相反;除了图像名称之外,它不会告诉用户有关容器实际上是什么版本的任何信息。您可以在我们的container docs 上阅读有关版本兼容性和选择适当标签的更多信息。

            https://techcommunity.microsoft.com/t5/containers/windows-server-2019-now-available/ba-p/382430#

            【讨论】:

              【解决方案10】:

              这看起来像"docker pull" fails in windows 10 #1100

              如果添加--experimental 不起作用,请考虑re-installing docker for windows

              【讨论】:

              • 添加“experimental: true”对我不起作用,所以我想我会在重新安装 docker 之前尝试切换到 Linux 容器并且它起作用了。
              • 在Windows环境下,还要检查Hyper-V虚拟机管理服务是否正在运行,安装docker后,切换到Linux容器模式。
              • 添加experimental 有效,谢谢...为什么会这样?
              • @AngshumanAgarwal 使用实验性功能 (docs.docker.com/docker-for-windows/#command-line) 添加了使用 Docker for Windows 可能需要的驱动程序 (github.com/docker/cli/blob/master/experimental/…)。
              【解决方案11】:

              我在 Windows 10 上遇到了同样的问题。我通过在实验模式下运行 Docker 守护程序绕过了它:

              1. 右键单击 Windows 系统托盘中的 Docker 图标
              2. 转到设置
              3. 守护进程
              4. 高级
              5. 设置"experimental": true
              6. 重启 Docker

              【讨论】:

              • 如何右键单击 Docker 实例?是 Windows 任务栏中的 Docker 图标吗?
              • @PeterMortensen 没错,就是任务栏中的 Docker 图标
              • 在 Windows 上,您可以直接在 '%programdata%\docker\config\daemon.json' 找到配置文件并在那里设置属性。
              • 这对我有用,我只是想知道为什么会这样?什么是实验性的?
              • 如果您从独立二进制文件运行停靠(守护程序),请使用 --experimental 功能
              【解决方案12】:

              右键单击 Docker 实例 前往设置 守护进程 先进的 设置“实验”:true 重启 Docker

               {
                    "registry-mirrors": [],
                    "insecure-registries": [],
                    "debug": true,
                    "experimental": true
                  }
              

              【讨论】:

                【解决方案13】:

                在 Windows 上您必须编辑文件 daemon.json 或 windows-daemon-options.json,Windows 上配置文件的默认位置是 %programdata%\docker\config\daemon.json 或 %programdata%\docker\资源\windows-daemon-options.json

                json 文件中的可选字段 features,允许用户启用或禁用特定的守护程序功能。示例:{"features":{"buildkit": true}} 启用 buildkit 作为默认 docker 镜像构建器。

                【讨论】:

                • 在 windows server 2019 上运行: $configfile =@" { "experimental":true } "@ $configfile|Out-File -FilePath c:\Programdata\docker\config\daemon.json -编码 ascii -Force restart-Service docker
                【解决方案14】:

                显示此消息的原因是它无法找到正在运行的 Linux 容器。因此,请确保在运行之前从 windows 切换到 linux 容器。

                【讨论】:

                  【解决方案15】:

                  这个错误可能有很多原因。但此错误最明显的原因是在 Linux 容器模式下使用 Windows 容器,反之亦然。

                  1. 单击上下文菜单中系统托盘中的 Docker 图标
                  2. 点击“切换到 Window/Linux 容器”
                  3. 选项单击切换对话框中的切换按钮
                  4. 可能需要一点时间
                  5. 确保 Docker 现在处于运行状态

                  【讨论】:

                  • 它解决了我关于“windows/amd64 没有匹配的清单”的问题
                  • 解决了“清单列表条目中的 windows/amd64 10.0.17134 没有匹配的清单”问题对我有用
                  • 这个答案与 Windows Container 无关。它仅在您的容器要求是 Linux Container 时才有效。请参考@benscabbia 的回答。
                  • 嗨@junnyea,我试图解释这两种情况,所以如果您在用户中使用Windows Container,那么Linux Containers Settings 将不起作用,您可能必须移动到Windows Containers Settings,并且虎钳反之亦然。
                  • 就我而言,我需要在 Windows 架构中运行它。切换到 Linux 容器是没有意义的。如果给出的解决方案不是在容器之间切换,它将更相关。
                  【解决方案16】:

                  在我的情况下,我使用的 Windows 操作系统版本不支持我试图提取的标签。使用较旧的标签让我可以让它工作。

                  具体来说:

                  docker pull mcr.microsoft.com/windows/nanoserver:1903 出错

                  docker pull mcr.microsoft.com/windows/nanoserver:1803-amd64 工作

                  【讨论】:

                  • 这个!与旧图像(servercore/nanoserver)相比,微软在那里做了一些改变。现在,您需要查找要部署到的系统的 Windows 版本并相应地选择基础映像。
                  • 不错的答案!按照本教程docs.microsoft.com/en-us/virtualization/windowscontainers/…,这在 Windows 10 上对我有用
                  • 它也对我有用。但这是否意味着我在拉取每张图片时都需要使用这种方法,例如 hello-world?
                  • @Mandroid 我会对您的发现感兴趣,但有些图像似乎有效,而在我的情况下有些无效,所以我猜它是非常特定于设置的。例如如果您有一个 Windows 补丁,可能会有所不同。
                  • 使用winver 确保您的主机的Windows 版本更新或等于映像中的版本。
                  【解决方案17】:

                  docker 运行 mcr.microsoft.com/windows/servercore:ltsc2016

                  试试上面的命令。 您正在提取的内容应该与您所在的底层 Windows 版本兼容。如果您使用的是 Windows Server 2016,上述内容将有效。

                  关注这个话题了解更多信息

                  https://github.com/docker/for-win/issues/3761

                  【讨论】:

                    【解决方案18】:

                    我在 Azure DevOps 管道中遇到了这个错误。

                    Step 1/7 : FROM nginx:alpine
                    alpine: Pulling from library/nginx
                    no matching manifest for windows/amd64 10.0.14393 in the manifest list entries
                    ##[error]C:\Program Files\Docker\docker.exe failed with return code: 1
                    ##[section]Finishing: Build an image
                    

                    问题是我选择了 Hosted VS2017 而不是 Hosted Ubuntu。如下修改后,构建成功。

                    希望对你有帮助。

                    【讨论】:

                      【解决方案19】:

                      我在使用 docker for Windows 运行 Windows IIS 映像时遇到了同样的问题。阅读上面 Mohammad Trabelsi 的回复后,我意识到要解决我的问题,我需要将我的容器(在 docker 上)切换为 Windows 容器。

                      为此:

                      1. 右键单击 Docker 实例
                      2. 选择“切换到 Windows 容器...”

                      【讨论】:

                        【解决方案20】:

                        这可能不仅仅因为 Windows 容器!

                        今天所有的 Node.Js docker 镜像都是不可拉取的。始终检查您之前尝试拉取的图像。

                        Related Github-Issue

                        【讨论】:

                          【解决方案21】:

                          考虑您要提取的应用程序 - 它们是基于 Windows 的吗? 如果没有,则需要运行 Linux 容器。

                          如果不使用实验模式,您只能在一种容器风格中使用 Docker,而不是另一种风格。 如果您如上所述激活实验模式,则可以根据您在撰写文件中拉取的应用程序的需要使用 Windows 和 Linux 容器。

                          关键说明:实验性 - 仍由 Docker 开发。

                          【讨论】:

                            【解决方案22】:

                            另一种可能的方法:

                            在系统托盘中,右键单击泊坞窗图标,然后单击Switch to Linux containers

                            (Docker for Windows,社区版,版本 18.03.1)

                            【讨论】:

                              【解决方案23】:

                              需要先用Linux平台拉取,然后才能在Windows上运行:

                              docker pull --platform linux php
                              docker run -it php
                              

                              见博文Docker for Windows Desktop 18.02 with Windows 10 Fall Creators Update

                              【讨论】:

                              • 是的,--platform 标志也有效。虽然它可能会重新下载东西。
                              • "--platform" 仅在启用了实验功能的 Docker 守护程序上受支持
                              【解决方案24】:

                              您处于 Windows 容器模式。因此,如果您不确定要拉取的映像是为 Windows 架构构建的,则需要切换到 Linux 容器。

                              【讨论】:

                              • 另一种选择(我也发现它正在工作)在chuck's answer
                              • 一旦切换失败?这是一种解决方法
                              • 如果您切换到 Linux 容器,您是否能够在 Docker 中托管 Windows 应用程序?例如在同一个 Docker 实例上使用 IIS 和 MySQL。
                              • @webworm 既然还有适用于 Windows 的 MySQL,那么当你想将它与 IIS 混合使用时,为什么要使用 Linux 版本,而不仅仅是使用它的 Windows 版本?
                              猜你喜欢
                              • 2020-03-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2020-01-14
                              • 2021-04-03
                              • 2021-06-03
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多