ARM架构Ubuntu 20中Dockerfile构建失败求助
解决Docker镜像构建
exec /bin/sh: exec format error问题 核心原因
这个错误是镜像架构与宿主机CPU架构不匹配导致的:Mac M系列为ARM64架构,构建时默认拉取/生成ARM64镜像;而Ubuntu虚拟机即便同为ARM架构,若Docker未正确配置跨架构构建支持,或基础镜像指定了x86_64(amd64)版本,都会导致ARM宿主机无法执行x86二进制文件,触发该错误。
具体解决步骤
1. 启用Docker BuildKit与跨架构支持
在Ubuntu虚拟机中执行命令,确认BuildKit状态:
docker buildx ls
若输出无linux/arm64节点,需开启BuildKit:
- 编辑
/etc/docker/daemon.json,添加配置:{ "features": { "buildkit": true } } - 重启Docker服务:
sudo systemctl restart docker
2. 明确指定构建架构
两种方式确保构建ARM64镜像:
- 构建命令中直接指定:
docker-compose --debug -f local.yml build --build-arg TARGETARCH=arm64 - 在Dockerfile开头添加架构适配声明(替换为你的基础镜像):
ARG TARGETARCH FROM --platform=linux/${TARGETARCH} python:3.9-slim # 后续构建步骤
3. 清理旧镜像缓存
Ubuntu虚拟机可能缓存了x86架构的基础镜像,需清理后重新构建:
docker system prune -a docker-compose --debug -f local.yml build --no-cache
4. 检查基础镜像的架构支持
确认local.yml中所有服务使用的基础镜像支持ARM64架构,避免使用仅兼容amd64的旧版镜像。
验证镜像架构
构建完成后,执行命令检查镜像架构是否匹配:
docker inspect <镜像名称> | grep Architecture
正常输出应为"Architecture": "arm64"。
内容的提问来源于stack exchange,提问作者Kelechi Meister
相关产品推荐
相关产品推荐

