Macbook M2上指定linux/amd64执行docker build失败求助
M2芯片MacBook上Docker构建linux/amd64镜像失败的解决方法
问题场景
在搭载M2芯片的MacBook上执行docker build构建linux/amd64平台镜像时失败,但直接运行对应平台的镜像无异常。
可复现命令
echo "FROM alpine:latest" | docker build --platform=linux/amd64 --progress=plain -f - .
核心错误信息
#5 ERROR: no match for platform in manifest sha256:d9ab3e9e8a65da61fb54c3e2471c8fabf787ce49403919bff7eaf10f99e33215: not found ------ > exporting to image: ------ ERROR: failed to solve: no match for platform in manifest sha256:d9ab3e9e8a65da61fb54c3e2471c8fabf787ce49403919bff7eaf10f99e33215: not found
完整错误输出
#1 [internal] load .dockerignore #1 transferring context: 2B done #1 DONE 0.0s #2 [internal] load build definition from Dockerfile #2 transferring dockerfile: 93B done #2 DONE 0.0s #3 [internal] load metadata for docker.io/library/alpine:latest #3 DONE 0.6s #4 [1/1] FROM docker.io/library/alpine:latest@sha256:02bb6f428431fbc2809c5d1b41eab5a68350194fb508869a33cb1af4444c9b11 #4 resolve docker.io/library/alpine:latest@sha256:02bb6f428431fbc2809c5d1b41eab5a68350194fb508869a33cb1af4444c9b11 0.0s done #4 CACHED #5 exporting to image #5 exporting layers done #5 exporting manifest sha256:c887664786a565506760c1ebb17d0edbbc0f8427a4e723d05bba6dc1c199f63f done #5 exporting config sha256:c9eabdf343eb2fef6b265aa86db47ee270dd0a170bf37bef1dcf94fa73236b65 done #5 exporting attestation manifest sha256:ff813dfd9ec5f193d95d20bafa96b3d48b7510d178d4ef3195981314151856f1 done #5 exporting manifest list sha256:d9ab3e9e8a65da61fb54c3e2471c8fabf787ce49403919bff7eaf10f99e33215 done #5 naming to moby-dangling@sha256:d9ab3e9e8a65da61fb54c3e2471c8fabf787ce49403919bff7eaf10f99e33215 done #5 unpacking to moby-dangling@sha256:d9ab3e9e8a65da61fb54c3e2471c8fabf787ce49403919bff7eaf10f99e33215 done #5 ERROR: no match for platform in manifest sha256:d9ab3e9e8a65da61fb54c3e2471c8fabf787ce49403919bff7eaf10f99e33215: not found ------ > exporting to image: ------ ERROR: failed to solve: no match for platform in manifest sha256:d9ab3e9e8a65da61fb54c3e2471c8fabf787ce49403919bff7eaf10f99e33215: not found
镜像运行正常验证
$ docker run --rm -ti --platform linux/amd64 alpine:latest uname -a Linux b2a7299eadea 5.15.49-linuxkit #1 SMP PREEMPT Tue Sep 13 07:51:32 UTC 2022 x86_64 Linux $ docker run --rm -ti --platform linux/arm64 alpine:latest uname -a Linux 00ecc31c7eeb 5.15.49-linuxkit #1 SMP PREEMPT Tue Sep 13 07:51:32 UTC 2022 aarch64 Linux
已完成的排查
- 设备为ARM架构Apple M2处理器:
$ uname -a Darwin 22.5.0 Darwin Kernel Version 22.5.0: Mon Apr 24 20:53:19 PDT 2023; root:xnu-8796.121.2~5/RELEASE_ARM64_T6020 arm64 - Rosetta qemu模拟功能正常:
$ docker run --rm -ti --platform linux/amd64 alpine:latest uname -m x86_64 - Docker Builder已配置多平台构建:
$ docker builder ls NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS default * docker default default running v0.11.6 linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64 desktop-linux docker desktop-linux desktop-linux running v0.11.6 linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64
解决方案
方法1:构建时显式命名镜像
避免生成悬空镜像时的平台匹配问题,给镜像指定标签:
echo "FROM alpine:latest" | docker build --platform=linux/amd64 --progress=plain -f - . --tag my-alpine-amd64:latest
方法2:启用Rosetta模拟选项
- 打开Docker Desktop偏好设置
- 进入Features in development选项卡
- 勾选Use Rosetta for x86/amd64 emulation on Apple Silicon
- 重启Docker Desktop后重新执行构建
方法3:使用Buildx构建并加载到本地
Buildx对多平台构建支持更完善,通过--load参数将镜像导入本地库:
echo "FROM alpine:latest" | docker buildx build --platform=linux/amd64 --progress=plain -f - . --load --tag my-alpine-amd64:latest
方法4:更新Docker版本
旧版本Docker在Apple Silicon上的多平台构建可能存在bug,更新至最新版Docker Desktop后重试。
内容的提问来源于stack exchange,提问作者Jesper Røn-Jensen
相关产品推荐
相关产品推荐

