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

时间:2018-01-02 19:52:15

标签: docker

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

如何解决此问题?

26 个答案:

答案 0 :(得分:61)

来自this article

Linux与Windows容器:有什么区别?

现在可以使用Docker容器支持Windows Server 2016,管理员必须使用 想知道Windows和Linux容器之间的区别。这是一个概述。

为了简单起见,让我们将它们分解为相似之处和不同之处。 它们看起来像这样:

<强>相似性

Linux和Windows上的Docker容器在以下方面类似: 它们被设计为用作应用程序容器。 它们本地运行,这意味着它们不依赖于虚拟机管理程序或虚拟机。 它们可以通过Docker进行管理(尽管您也可以使用PowerShell) 在Windows上管理容器)。 它们仅限于包含主机本机支持的应用程序 操作系统。换句话说,Docker for Windows只能托管Windows Docker容器中的应用程序和Linux上的Docker仅支持Linux应用程序。 它们在两个操作系统上提供相同的可移植性和模块化功能。

<强>差异

这就是使Windows上的Docker与众不同的原因:

Docker仅支持某些版本的Windows(即Windows Server 2016和Windows版) Windows 10)。相比之下,Docker可以在任何类型的基于Linux的现代操作系统上运行。 即使在Docker支持的Windows版本上,Windows也有更严格的要求 关于图像兼容性。阅读更多关于那些[这里*])。 Windows上尚不支持某些容器的Docker网络功能。 它们在本页底部详细说明。 在Linux上用于Docker的大多数容器编排系统都是 Windows不支持。 Docker Swarm是一个例外,它受支持。 (但是,如果要在Windows上使用其他协调器,请不要担心; Windows 对Kubernetes和Apache Mesos等协调者的支持正在开发中。)

非Docker容器和Windows

值得一提的是,Docker是唯一的主要容器平台 目前与Windows兼容。其他类型的容器引擎,如OpenVZ和 LXD仍然只支持Linux,并且可能在可预见的未来仍然如此。

由于这些容器平台迎合了不同类型的用例,而不是Docker 对于决定是否运行Docker的管理员来说,缺乏Windows支持可能无关紧要 Windows或Linux。事实上,Docker是唯一可用的容器选项 在Windows上很重要,因为它突出了Windows容器的事实 到目前为止,生态系统比Linux容器世界小得多。

以下是上述引文中缺少的链接:here

解决方案是:

  1. 右键单击Docker实例

  2. 列出项目

  3. 转到设置

  4. 守护程序

  5. 高级

  6. 设置“experimental”:true

  7. 重启Docker

答案 1 :(得分:38)

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

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

Switch Container Mode Dialog

答案 2 :(得分:32)

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

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

答案 3 :(得分:18)

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

特别是:

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

docker pull mcr.microsoft.com/windows/nanoserver:1803-amd64有效

答案 4 :(得分:17)

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

答案 5 :(得分:12)

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

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

然后:

./DockerCli.exe -SwitchDaemon

答案 6 :(得分:7)

另一种可行的方法:

在系统任务栏中,右键单击docker图标,然后单击Switch to Linux containers

(适用于Windows的Docker,社区版,版本18.03.1)

答案 7 :(得分:6)

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

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

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

答案 8 :(得分:6)

在 Docker 中:

  1. 转到设置
  2. 转到Docker引擎
  3. 实验性改为真实
  4. 应用并重启

.

答案 9 :(得分:4)

Windows 10 20H2 更新

  1. 转到 Docker 配置
  2. 转到 Docker 引擎选项卡
  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 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

答案 10 :(得分:3)

这不仅可能由于Windows容器而发生!

今天,所有的Node.Js docker镜像都不可拉。始终检查一下您尝试拉出的图像。

Related Github-Issue

答案 11 :(得分:3)

感谢@benscabbia,它在win10中对我有用

enter image description here

答案 12 :(得分:3)

弃用“最新”标签

我们不建议在所有Windows基本映像中使用“最新”标签,以鼓励采取更好的容器做法。 在2019日历年年初,我们将不再发布代码;我们将从可用标签列表中将其拖出。

我们强烈鼓励,改为声明您要在生产中运行的特定容器标签。 “最新”标记与特定标记相反;它并没有告诉用户有关容器实际上是哪个版本的信息,而不是图像名称。您可以在版本container docs上阅读有关版本兼容性的更多信息,并选择适当的标签。

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

答案 13 :(得分:1)

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

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

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

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

答案 14 :(得分:1)

这看起来像https://github.com/docker/for-win/issues/1100

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

答案 15 :(得分:1)

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

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

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

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

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

然后,您需要在设置中切换到 Linux Containers(通过取消选中“使用基于 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 集成运行,只需返回“设置”屏幕并撤消我们在第二步中所做的选择(这将重新启动 docker。)

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

答案 16 :(得分:1)

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

enter image description here enter image description here

enter image description here

enter image description here

json文件上的可选字段功能,允许用户启用或禁用特定的守护程序功能。示例:{“ features”:{“ buildkit”:true}}启用buildkit作为默认的Docker映像生成器。

答案 17 :(得分:1)

我在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 。进行如下更改后,构建成功。

enter image description here

希望有帮助。

答案 18 :(得分:1)

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

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

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

答案 19 :(得分:0)

右键单击Docker实例 前往设置 守护进程 高级 设置“实验性”:true 重新启动Docker

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

答案 20 :(得分:0)

之所以显示此消息,是因为它找不到正在运行的Linux容器。因此,在运行Windows之前,请确保从Windows切换到Linux容器。

答案 21 :(得分:0)

就我而言,问题消失之后,我必须先更新窗口

答案 22 :(得分:0)

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

答案 23 :(得分:0)

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

尝试上面的命令。 您要提取的内容应与您所在的基础Windows版本兼容。如果您在Windows Server 2016中,则上面的内容将起作用。

关注该主题以获取更多信息

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

答案 24 :(得分:0)

我在使用适用于Windows的docker运行Windows IIS映像时遇到了相同的问题。阅读上面的Mohammad Trabelsi响应后,我意识到要解决我的问题,我需要在Docker容器上切换Windows容器的容器。

为此:

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

答案 25 :(得分:-1)

版本:Windows 10

第1步:右键单击Docker实例并转到“设置”
enter image description here

第2步:从基础到高级并设置“实验”:true
enter image description here

第3步:重新启动Docker
enter image description here

第4步:成功安装dockerfile(例如:docker build -t williehao / cheers2019。) enter image description here