构建 Docker 映像时出现错误:“无法使用前端 dockerfile.v0 解决:无法创建 LLB 定义:清单中的平台不匹配”

Mig*_*Slv 65 docker windows-10 docker-image docker-build docker-desktop

我收到错误:

无法使用前端 dockerfile.v0 解决:无法创建 LLB 定义:清单中的平台不匹配

构建以下 Dockerfile 时:

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8
COPY . /inetpub/wwwroot
Run Code Online (Sandbox Code Playgroud)

Man*_*ish 87

在M1上的 Docker 文件中提供平台为我解决了这个问题。

例如,FROM --platform=linux/amd64 amazonlinux:2018.03

  • 这对我有用!,我在 mac M1 上运行这个映像,我必须将 Dockerfile 更新为“FROM --platform=linux/amd64 maven:3.6-jdk-8-slim” (3认同)

Mig*_*Slv 84

原因很简单。我的 Docker 桌面在 Linux 容器上运行,并且该映像是从 Windows 映像构建的。

只需切换到 Windows 容器即可解决问题。

该消息毫无线索,所以我希望这可以为其他人节省一些时间。

  • 对于任何想知道的人,要从 Linux 切换到 Windows 容器,您只需右键单击_系统托盘图标_中的 Docker 图标(假设您使用的是 Windows),然后单击“切换到 Windows 容器...” (31认同)

kon*_*dev 48

就我而言,我使用配备M1处理器的 Mac 来运行 Python 图像。我的docker-composeDockerfile如下所示:

docker-compose.yml

version: '3.7'

services:
  words_bot:
    build: .
    restart: unless-stopped
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM python:3-onbuild
COPY . /usr/src/app
CMD ["python", "-m", "bot"]
Run Code Online (Sandbox Code Playgroud)

该图像似乎需要x86主机架构,因此我收到了 OP 所指的错误。

在我将platform: linux/amd64添加到docker-compose.yml后,一切开始按预期工作:

version: '3.7'

services:
  cng_words_bot:
    build: .
    platform: linux/amd64
    restart: unless-stopped
Run Code Online (Sandbox Code Playgroud)

  • 太棒了,你救了我的命! (2认同)

Sha*_*oui 9

Docker 与某些架构(例如 ARM 架构(例如M1 ))混淆了。确保指定架构(平台)。

  services:
      service-name:
        platform: linux/x86_64. # Specify the architecture here
        image: some-image
Run Code Online (Sandbox Code Playgroud)

更新:

如果您使用的是 Apple Silicon Chip 机器(arm 架构),您应该在 Docker Desktop 上激活以下功能以实现更好的虚拟化:

  • Use Virtualization framework
  • Use Rosetta for x86/amd64 emulation on Apple Silicon

它将使用Rosetta 2模拟器而不是模拟器qemu,区别非常明显。


rak*_*esh 6

对我来说,Docker 镜像本身并没有构建。所以我必须添加--platform linux/x86_64作为docker build命令的参数。