获取 docker-entrypoint.sh:架构匹配时执行格式错误

问题描述 投票:0回答:1

我有以下 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");

我可以在 MacBook m3 中构建并运行该映像(

uname -m
打印arm64)

现在,我要做的是在 GitHub Actions 中构建图像并将其发布到 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
。我过去遇到过这个错误,它通常表明用于构建映像的核心映像(来自初始 FROM 步骤的映像)与我们尝试运行它的拱门不匹配。但是当我do
docker inspect
我可以检查架构是arm64。当我检查 GitHub Action 日志时,sha256 与节点中的多架构图像索引相匹配。

不确定我做错了什么,我所有的故障排除想法都没有达到任何效果T_T。

  • 在拉取图像之前我已经尝试过
    docker system prune -a
    。我可以看到我正在拉动所有层,但运行时仍然失败。
  • 我在调用
    setup-buildx
    之前尝试过使用 qemu,但我没有看到任何区别。我知道我不需要 qeru 为此(?)
- name: Set up QEMU
uses: docker/setup-qemu-action@v3 

编辑:设置

`FROM node@sha256:e256e6fb2dd3b003ea634a657f7da94bb34a98e599d7bcb99b5bec30a1343eae`

使其工作,这让我更加困惑,因为这与我在之前的 GitHub Actions 日志中看到的 sha256 相同。

docker github-actions cpu-architecture buildx
1个回答
0
投票

你的形象被破坏了。 FROM 行指定

--platform=$BUILDPLATFORM
,这意味着无论映像的目标平台是什么,映像层中包含的二进制文件都将与构建平台架构相匹配。您需要从 Dockerfile 中删除它,以停止使用与文件系统层内容不匹配的平台构建映像。

© www.soinside.com 2019 - 2024. All rights reserved.