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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:30:11