Docker:"清单列表条目中的windows/amd64没有匹配的清单"

Moh*_*lsi 86 docker

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

$ docker pull php
Run Code Online (Sandbox Code Playgroud)

我收到了这条消息:

Using default tag: latest
latest: Pulling from library/php no matching manifest for windows/amd64 
        in the manifest list entries
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

ben*_*bia 118

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

  1. 右键单击Docker实例
  2. 转到"设置"
  3. 守护进程
  4. 高级
  5. 设置 "experimental": true
  6. 重启Docker

  • 您如何右键单击Docker实例?是Windows任务栏中的Docker图标吗? (5认同)
  • 在 Windows 上,您可以直接在“%programdata%\docker\config\daemon.json”找到配置文件并在那里设置属性。 (4认同)
  • 如果您从独立二进制文件运行对接(守护进程),请使用“--experimental”功能 (3认同)
  • 那么正在*试验*什么? (3认同)
  • @PeterMortensen 没错,它是任务栏中的 Docker 图标 (2认同)
  • 这对我有用,我只是想知道为什么这有效?实验是为了什么? (2认同)
  • 设置“experimental”:true有任何安全问题吗?操作完成后我需要恢复吗? (2认同)

小智 52

您处于Windows容器模式.因此,如果您不确定要为Windows体系结构构建要提取的映像,则需要切换到Linux容器.

  • 这解决了问题。我正在使用Windows 10平台。 (3认同)

Wil*_*eng 39

版本:Windows 10

第 1 步:右键单击 Docker 实例并转到设置
在此处输入图片说明

第 2 步:从基本到高级并设置“实验性”:true 在此处输入图片说明

第 3 步:重启 Docker
在此处输入图片说明

第 4 步:安装 dockerfile 成功(例如:docker build -t williehao/cheers2019。) 在此处输入图片说明


tom*_*mab 28

另一种可能的方法:

在系统托盘中,右键单击docker图标,然后单击Switch to Linux containers.

(Docker for Windows,Community Edition,版本18.03.1)


Imr*_*ved 27

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

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

切换容器模式对话框

  • 如果找不到系统托盘图标,此命令将在 PowerShell 上执行此操作 `& $Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon 。` 请参阅此处 https://learn.microsoft.com/en -us/虚拟化/windowscontainers/quick-start/set-up-environment?tabs=dockerce (3认同)
  • 它解决了我的“关于Windows / amd64没有匹配的清单”的问题 (2认同)
  • 它对我有用,解决了“清单列表条目中没有 Windows/amd64 10.0.17134 的匹配清单”的问题 (2认同)
  • 这个答案与 Windows 容器无关。仅当您的容器要求是 Linux 容器时它才有效。请参考@benscabbia的回答。 (2认同)

小智 19

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

cd "C:\Program Files\Docker\Docker"
Run Code Online (Sandbox Code Playgroud)

进而:

./DockerCli.exe -SwitchDaemon
Run Code Online (Sandbox Code Playgroud)


joe*_*ons 17

就我而言,原因是我所在的Windows操作系统版本不支持我尝试提取的标签。使用较旧的标签使我可以使用它。

特别:

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

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

  • 这!与旧图像(servercore/nanoserver)相比,微软改变了一些东西。现在,您需要查找要部署到的系统的 Windows 版本并相应地选择基础映像。 (2认同)

chu*_*uck 9

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

docker pull --platform linux php
docker run -it php
Run Code Online (Sandbox Code Playgroud)

请参阅博客文章Docker for Windows Desktop 18.02 with Windows 10 Fall Creators Update.


Von*_*onC 6

这看起来像“docker pull”在 Windows 10 中失败 #1100

如果添加--experimental不起作用,请考虑重新安装 docker for windows


Sey*_*baf 6

在 Docker 中:

  1. 进入设置
  2. 转到Docker 引擎
  3. 实验更改为真实
  4. 应用并重新启动

.


lui*_*nal 6

我升级 Docker Desktop(之前配置了 WSL2 集成)后就发生了这种情况。

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

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

cd "C:\Program Files\Docker\Docker"
./DockerCli.exe -SwitchDaemon
Run Code Online (Sandbox Code Playgroud)

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

然后,您需要在“设置”中切换到 Linux 容器(通过取消选中“使用基于 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
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

docker run mcr.microsoft.com/windows/servercore:ltsc2016 
Run Code Online (Sandbox Code Playgroud)

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

请关注此主题以获取更多信息


小智 5

右键单击 Docker 实例 转到 Settings Daemon Advanced 设置“experimental”: true 重新启动 Docker

 {
      "registry-mirrors": [],
      "insecure-registries": [],
      "debug": true,
      "experimental": true
    }
Run Code Online (Sandbox Code Playgroud)


Lin*_*nix 5

Windows 10 20H2 更新

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

在此处输入图片说明


您还可以通过使用您喜欢的代码编辑器(Visual code, Notepad++...)打开来手动修改配置文件,例如:

# 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
Run Code Online (Sandbox Code Playgroud)

或者直接用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
Run Code Online (Sandbox Code Playgroud)

输出示例

PS C:\WINDOWS\system32> type $FILE
{
  "registry-mirrors": [],
  "insecure-registries": [],
  "debug": false,
  "experimental": true
}
Run Code Online (Sandbox Code Playgroud)

在您需要重新启动 Docker 守护进程后

PS C:\WINDOWS\system32> Restart-Service docker
Run Code Online (Sandbox Code Playgroud)

检查服务状态

PS C:\WINDOWS\system32> Get-Service docker
Status   Name               DisplayName
------   ----               -----------
Running  docker             Docker Engine
Run Code Online (Sandbox Code Playgroud)


小智 5

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

为什么你遇到这个问题: 因为你指的是基于Linux的镜像,并且你当前正在使用Windows基础平台来运行/构建docker镜像。

解决方案:简短的回答:要么将当前平台切换到 Linux 模式,要么提取基于 Windows 的映像。以下是可能的选项列表:

  1. 切换到 Linux 容器,因为错误是“没有匹配的 windows/amd64 清单
  2. 设置docker环境“experimental”:true。
  3. 拉取特定于平台的镜像,例如 docker pull --platform {linux/Windows} {image-name}