如何通过GitHub Actions的docker/build-push-action正确构建ARM64镜像?
解决GitHub Actions中ARM64镜像构建失败的问题
错误原因
在x86_64架构的GitHub Runner(ubuntu-latest)上构建ARM64镜像时,容器内的ARM架构二进制文件无法直接在x86主机环境中执行,导致exec format error,必须启用QEMU跨架构模拟才能正常运行ARM指令。
解决方案
方案一:修复原有分步构建流程
在Workflow中添加QEMU和Buildx初始化步骤,为跨架构构建提供环境支持,修改后的完整配置如下:
name: Build and Push on: push: branches: - main jobs: build-and-push: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: install: true - name: Set date id: date run: echo "::set-output name=date::$(date +'%m-%d-%Y')" - name: Authenticate uses: docker/login-action@v1 with: registry: quay.io username: ${{ secrets.QUAY_USERNAME }} password: ${{ secrets.QUAY_PASSWORD }} - name: Build and Push x86 image uses: docker/build-push-action@v2 with: file: ./images/Containerfile push: true tags: | quay.io/user/tools:${{ steps.date.outputs.date }}-x86_64 platforms: linux/amd64 - name: Build and Push ARM64 image uses: docker/build-push-action@v2 with: file: ./images/Containerfile push: true platforms: linux/arm64 tags: | quay.io/user/tools:${{ steps.date.outputs.date }}-aarch64 - name: Create and Push Multi-Architecture Manifest run: | sudo podman manifest create tools-${{ steps.date.outputs.date }}-list sudo podman manifest add tools-${{ steps.date.outputs.date }}-list quay.io/user/tools:${{ steps.date.outputs.date }}-x86_64 sudo podman manifest add tools-${{ steps.date.outputs.date }}-list quay.io/user/tools:${{ steps.date.outputs.date }}-aarch64 sudo podman manifest push tools-${{ steps.date.outputs.date }}-list quay.io/user/tools:${{ steps.date.outputs.date }} sudo podman manifest push tools-${{ steps.date.outputs.date }}-list quay.io/user/tools:latest
方案二:用Buildx直接构建多架构镜像(更简洁)
无需手动分步构建和合并清单,Buildx可直接构建并推送多架构镜像清单,简化流程:
name: Build and Push Multi-Arch on: push: branches: - main jobs: build-and-push: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: install: true - name: Set date id: date run: echo "::set-output name=date::$(date +'%m-%d-%Y')" - name: Authenticate uses: docker/login-action@v1 with: registry: quay.io username: ${{ secrets.QUAY_USERNAME }} password: ${{ secrets.QUAY_PASSWORD }} - name: Build and Push Multi-Arch Image uses: docker/build-push-action@v2 with: file: ./images/Containerfile push: true platforms: linux/amd64, linux/arm64 tags: | quay.io/user/tools:${{ steps.date.outputs.date }} quay.io/user/tools:latest
关键说明
docker/setup-qemu-action:安装QEMU模拟器,实现跨架构指令的模拟执行。docker/setup-buildx-action:启用Docker Buildx工具,支持多架构镜像构建。- 在
build-push-action中指定platforms参数,明确要构建的目标架构。
内容的提问来源于stack exchange,提问作者user21113865
相关产品推荐
相关产品推荐

