构建Docker镜像时出现错误:"使用前端dockerfile.v0解决失败:无法创建LLB定义:清单中没有匹配平台"

64

我遇到了以下错误:

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

在构建以下 Dockerfile 时出现:

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8
COPY . /inetpub/wwwroot
12个回答

84

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

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


3
这对我有用!我正在mac M1上运行此镜像,我不得不将Dockerfile更新为FROM --platform=linux/amd64 maven:3.6-jdk-8-slim - Joselo
我也在这里工作过。我正在使用M1 Monterey和amazoncorretto:17-alpine-jdk镜像。 - Gabriel Silva
本地平台似乎是linux/arm64/v8,因此如果您的容器可以使用它,您可以使用FROM --platform=linux/arm64/v8 ... - samkass
我使用的是Windows系统,以下方法适用于我。我遇到了以下错误: failed to create LLB definition: no match for platform in manifest sha256:37bfa5a2240dcd178564aa9ee041ae2c88dde18c662c2c7ddc965e26724a81bb: not found 使用一个只有一行的docker文件:FROM mcr.microsoft.com/windows/server:ltsc2022。我将其转换为FROM --platform=windows/amd64 mcr.microsoft.com/windows/server:ltsc2022,然后我就能够构建(至少开始下载)了。 - El Bachir
为什么这个有效? - michaelsnowden

84

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

将容器切换到Windows可以解决这个问题。

错误信息并没有提供线索,所以我希望这能为其他人节省一些时间。


1
我在Windows WSL上工作,遇到了一个错误,如下所示:“无法使用前端dockerfile.v0解决:无法创建LLB定义:无法解析平台:“”是“”的无效组件:平台说明符组件必须匹配“^ [A-Za-z0-9_-] + $”:无效参数”,请问您能否提供更多详细信息? - Mahmoud
31
对于那些想知道的人,要从Linux切换到Windows容器,您只需右键单击Docker图标在您的系统托盘图标 - 假设您在Windows中 - 然后点击“切换到Windows容器...”即可。 - Raphael Setin
@RaphaelSetin,据我目前的理解,Docker桌面版在Windows上是可能的,那么在Mac上的Docker也能实现吗? - Homa Pour Mohammadi
1
@HomaPourMohammadi 在 MacOS 上不可能做到这一点,但有一些解决方法需要更多的工作,比如 这个 - Raphael Setin
1
由于某些原因,“切换到 Windows 容器…”选项未显示,因此我执行了一个 C:\Program Files\Docker\Docker\DockerCLI.exe -SwitchDaemon 命令,就像 这里所描述的那样。 - w5m
你可能需要使用以下命令启用Windows容器: Enable-WindowsOptionalFeature -Online -FeatureName $("Microsoft-Hyper-V", "Containers") -All - cpoDesign

47

在我的情况下,我使用了一台搭载M1芯片的Mac电脑运行Python镜像。我的docker-composeDockerfile如下:

docker-compose.yml

version: '3.7'

services:
  words_bot:
    build: .
    restart: unless-stopped

Dockerfile:

FROM python:3-onbuild
COPY . /usr/src/app
CMD ["python", "-m", "bot"]

看起来该镜像需要一个x86主机架构,所以我得到了OP提到的错误。

docker-compose.yml中添加platform: linux/amd64后,一切都按预期开始工作了:

version: '3.7'

services:
  cng_words_bot:
    build: .
    platform: linux/amd64
    restart: unless-stopped

2
太棒了,你救了我的一天! - Dhanu K
1
然而这会破坏 Linux 环境的设置。希望有一个可以在任何地方工作的解决方案。 - Jonny
@Jonny 我在Linux上没有遇到过这个问题,因为我的Mac和Linux服务器都是arm架构的,如果你想在两种架构上都使用Python,可以尝试一个不同(不是onbuild)的Python镜像,或者从Ubuntu构建自己的Python镜像,这是一个例子(注意:如果你不需要所有Ubuntu软件,则使用Alpine Linux的镜像)FROM ubuntu:20.04RUN apt-get update && apt-get install -y python3 python3-dev pip VOLUME /usr/src/app WORKDIR /usr/src/app COPY requirements.txt /usr/src/app RUN pip install -r requirements.txt CMD ["python", "-m", "bot"] - konnovdev

9

Docker对于一些架构(例如M1)会感到困惑。请确保指定架构(platform)。

  services:
      service-name:
        platform: linux/x86_64. # Specify the architecture here
        image: some-image

更新:

如果你使用的是苹果芯片机器(arm架构),为了获得更好的虚拟化效果,需要在Docker Desktop上激活以下功能:

  • 使用虚拟化框架
  • 在Apple Silicon上使用Rosetta进行x86/amd64仿真

这将使用Rosetta 2仿真器替代qemu,两者之间的差别非常显著。


6

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


4
(假设您正在Windows平台上运行Docker)要解决此问题,请右键单击托盘中的Docker图标(在启动Docker引擎后,在系统时钟附近看到此图标),并选择选项“切换到Windows容器...”,将容器从Linux切换到Windows即可。 步骤1 Step 1 步骤2 Step 2

2

当我在一个非常简单的Dockerfile上使用Docker构建时,我遇到了一个类似的问题:

FROM node:lts-alpine

COPY ./ /app/
RUN cd /app && npm ci && npm run build

当运行docker build -t foo .时,OP遇到了一个略有不同原因的错误。但是,当先运行docker pull node:lts-alpine,然后再重复该构建命令时,构建就可以正常运行了。在我看来,这似乎是Docker for Windows中的一个小问题。在这里切换到Windows容器似乎不是一个合理的选择,因为基础容器对于基于Linux的上下文来说相当有效。我尝试进行切换,但这只会引起另一个Docker for Windows的错误。

0
在我的情况下,我使用的是 Mac M1,但它缺少一个 /,就像下面这样:
它原本是这样的:
version: '3.6'
services:
  service-name:
    build:
      # It was without the /, like:
      context: .

修复:

version: '3.6'
services:
  service-name:
    build:
      # The correct one
      context: ./

错误信息如下:

failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status code [manifests latest]: 401 Unauthorized

我还需要更改credsStore的值。更多信息:docker pull gives error: no basic auth credentials #207

希望这能帮助到某些人,我花了很多时间才解决它。


0
在我的情况下,我只是与 wifi 断开连接了,因此在花费数小时尝试调试问题之前,请仔细检查您是否在线!

0
在搭载Intel芯片的macOS上,构建“标准”Docker镜像时,我遇到了这个问题。
重启Docker守护进程解决了我的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接