如何将 Github 操作与具有不同架构的 Docker 容器一起使用

How to use Github Actions with a Docker container with a different architecture

我想自动构建我正在编写的应用程序。我想为 ARM64/v8 (aarch64) 和 amd64 (x86) 构建它。我成功地为 x86 案例创建了 Github 工作流程。

name: Build

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

env:
  CARGO_TERM_COLOR: always

jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: ubuntu:jammy

    steps:
        - name: Check architecture
          run: uname -m
        - name: Check release version
          run: cat /etc/lsb-release

现在我想对 aarch64 做同样的事情。我尝试使用 SHA select aarch64 容器并添加 --platform 选项。

container:
  image: ubuntu:jammy@sha256:2166a543cffd7180cb98ed58bb6a99b0e4b57ecae8859c2a8ee5aa4f5e0a4fda
  options: --platform linux/arm64/v8

但是工作流在 uname -m 命令处失败并显示错误消息 Error response from daemon: Container cb276d55aaf4a3f1cc50d308788233ee50fee29f80c05d6e557a76ec99916951 is not running

如果我想 运行 一个 docker 容器用于我自己机器上的不同架构,我必须先 运行 docker run --rm --privileged multiarch/qemu-user-static --reset -p yes。我认为这是我的 GitHub 工作流程中缺少的。不幸的是,我找不到任何描述如何在 GitHub 操作上完成的内容。

我在这里发现 this action 使用起来很简单。它现在对我来说已经足够好了。