You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:10:26