Docker:“在清单列表条目中没有匹配windows/amd64的清单”;

我在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

我该如何解决这个问题?

368431 次浏览

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

如果添加--experimental不起作用,考虑重新安装Windows的docker

您已进入Windows容器模式。所以如果你不确定你想要提取的映像是为Windows体系结构构建的,你需要切换到Linux容器。

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

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

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

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

  1. 右键单击Windows系统托盘中的Docker图标
  2. 设置
  3. 守护进程
  4. 先进的
  5. 设置"experimental": true
  6. 重启码头工人

另一种可能的方法是:

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

(Docker for Windows, Community Edition, version 18.03.1)

考虑一下你正在拉的应用程序——它们是基于Windows的吗? 如果不是,则需要运行Linux容器 如果不使用实验模式,你只能在一种容器样式中使用Docker。 如果您激活了上面提到的实验模式,您可以根据您在撰写文件中拉入的应用程序的需要使用Windows和Linux容器

重点说明:实验性- Docker仍在开发中。

这可能不仅仅发生在windows容器上!

现在所有的Node.Js docker映像都是不可拉的。总是检查你要拉之前的图像。

相关Github-Issue

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

这样做:

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

我在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

问题是我选择了主持VS2017而不是主持Ubuntu。在进行如下更改后,构建成功。

enter image description here

希望能有所帮助。

Docker run McR.microsoft.com/windows/servercore:ltsc2016

试试以上命令。 您正在提取的内容应该与您所在的底层Windows版本兼容。

关注这条线索获取更多信息

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

以我为例,我使用的Windows操作系统版本不支持我试图拉出的标签。利用一个旧的标签让我可以让它工作。

具体地说:

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

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

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

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

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

Switch Container Mode Dialog

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

在Windows上,必须编辑文件守护进程。Json或windows-daemon-options。在Windows上,配置文件的默认位置是%programdata%\docker\config\daemon。Json或%programdata%\docker\resources\windows-daemon-options.json

enter image description here enter image description here < / p >

enter image description here

enter image description here

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

右击Docker实例 进入设置 守护进程 先进的 设置“experimental”:true 重启码头工人< / p >

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

版本:Windows 10

步骤1:右键单击Docker实例,进入设置
enter image description here < / p >

步骤2:基本到高级,设置“;experimental": true” enter image description here < / p >

步骤3:重启Docker
. sh enter image description here < / p >

第四步:To install dockerfile is successful(例如:docker build -t williehao/cheers2019 .) enter image description here < / p >

弃用' latest '标签

为了鼓励更好的容器实践,我们在所有Windows基映像中都弃用' latest '标签。在2019日历年开始时,我们将不再发布标签;我们将从可用标记列表中删除它。

我们强烈鼓励你来代替声明你想在生产中运行的特定容器标签。“latest”标签是specific的反义词;除了图像名称,它不会告诉用户容器实际是什么版本。你可以阅读更多关于版本兼容性和选择适当的标签在我们的容器文档

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

在我的情况下,我必须更新窗口首先,之后的问题已经消失。

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

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

然后:

./DockerCli.exe -SwitchDaemon

在码头工人:

  1. 设置
  2. 码头工人引擎
  3. 实验改为真正的
  4. 新闻应用并重启

更新为Windows 10 20H2

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

enter image description here


你也可以手动修改配置文件,用你最喜欢的代码编辑器(可视代码,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 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

在我升级Docker Desktop(之前配置了WSL2集成)后,我就遇到了这种情况。

如果你在升级后遇到这种情况,仅供参考,我必须做以下工作:

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

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

如果你不这样做,你可能无法打开Docker Desktop上的Settings选项卡。

然后,你需要在设置中切换到Linux容器(通过< >强取消勾选< / >强 "使用基于WSL2的引擎"),然后重新启动。

enter image description here

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

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集成,只需返回到Settings屏幕并撤消我们在第2步中所做的选择(这将重新启动docker)。

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

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

你为什么说这个问题: 因为你引用的是基于Linux的镜像,而你目前使用的是windows基础平台来运行/构建docker镜像 < p >的决议: 简单的回答:要么将当前平台切换到Linux模式,要么拉出基于windows的映像。 下面是可能的选项列表:

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

确保您没有尝试使用Linux/WSL来提取Windows映像。

请使用Powershell终端。