GitHub Actions构建arm64镜像后运行出现exec格式错误求助
问题:Docker镜像构建后运行出现exec格式错误
本地运行正常情况
- 设备:MacBook M3(
uname -m输出arm64) - Dockerfile内容:
FROM --platform=$BUILDPLATFORM node:lts WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY index.js . CMD ["node", "index.js"]
- index.js内容:
console.log("Hello World"); - 本地构建、运行均无问题。
GitHub Actions工作流配置
使用以下工作流在ubuntu-latest runner上构建并推送镜像到GitHub Package Registry:
name: Create and publish a Docker image on: push: branches: ['release'] env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: build-and-push-image: runs-on: ubuntu-latest permissions: contents: read packages: write pages: write steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to the Container registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - name: Build and push Docker image id: push uses: docker/build-push-action@v5 with: platforms: linux/arm64 context: . push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}
问题现象
镜像成功推送至仓库,但拉取后运行时报错:
exec /usr/local/bin/docker-entrypoint.sh: exec format error
- 该错误通常指向架构不匹配,但
docker inspect确认镜像架构为arm64,且GitHub Actions日志中显示的基础镜像sha256与node多架构镜像索引一致。
已尝试的无效排查步骤
- 拉取镜像前执行
docker system prune -a,确保无缓存镜像,运行仍失败。 - 在
setup-buildx步骤前添加QEMU配置,无改善(疑问:在x86_64的ubuntu-latest上构建linux/arm64镜像是否需要QEMU?):
- name: Set up QEMU uses: docker/setup-qemu-action@v3
关键补充
将Dockerfile中的基础镜像改为指定sha256后,镜像可正常运行:
FROM node@sha256:e256e6fb2dd3b003ea634a657f7da94bb34a98e599d7bcb99b5bec30a1343eae
该sha256与之前GitHub Actions日志中使用的基础镜像sha256完全一致,此现象更令人困惑。
内容的提问来源于stack exchange,提问作者Rauññ
相关产品推荐
相关产品推荐

