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

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ññ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:00:27