我在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
如何解决此问题?
答案 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
解决方案是:
右键单击Docker实例
列出项目
转到设置
守护程序
高级
设置“experimental”:true
重启Docker
答案 1 :(得分:38)
此错误可能有很多原因。但是,此错误的最明显原因是在Linux容器模式下使用Windows容器,反之亦然。
答案 2 :(得分:32)
我在Windows 10上也有同样的问题。我通过在实验模式下运行Docker守护程序来绕过它:
"experimental": true
答案 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 中:
.
答案 9 :(得分:4)
"experimental": false
更改为 "experimental": true
Apply & Restart
按钮重新启动 Docker您还可以通过使用您最喜欢的代码编辑器(可视化代码、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)
答案 11 :(得分:3)
答案 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 的映像。 以下是可能的选项列表:
答案 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 的引擎”),然后重新启动。
此时,只需运行一个快速测试,下载图像并运行容器,看看是否能解决问题:
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
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 。进行如下更改后,构建成功。
希望有帮助。
答案 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中,则上面的内容将起作用。
关注该主题以获取更多信息
答案 24 :(得分:0)
我在使用适用于Windows的docker运行Windows IIS映像时遇到了相同的问题。阅读上面的Mohammad Trabelsi响应后,我意识到要解决我的问题,我需要在Docker容器上切换Windows容器的容器。
为此:
答案 25 :(得分:-1)