簡體   English   中英

在 GitHub x86 容器工作流中運行 aarch64 Docker 映像

[英]Run aarch64 Docker image in GitHub x86 container workflow

我正在測試一個 GitHub 工作流,該工作流檢查代碼是否在 arm64 上編譯,使用 Linux/aarch64 Docker 容器進行構建。 我知道 GitHub 容器僅是 x86 ,但是我想知道是否可以在 docker 上的 docker55D3B7C9ECFCBCD08EBFCBCD08EBECCZE4 上執行多架構圖像。

細節

在 GitHub 上執行 CI 作業並且容器初始化正常: https://github.com/facebookincubator/hsthrift/runs/4835956150?check_suite_focus=true#step:2:14

  /usr/bin/docker pull ghcr.io/donsbot/hsthrift/ci-base:ghcup-arm64v8
  ghcup-arm64v8: Pulling from donsbot/hsthrift/ci-base
...
  Digest: sha256:4c09341793d78efb74ad751b55152637d00b6297049458923825368fffb5485d
  Status: Downloaded newer image for ghcr.io/donsbot/hsthrift/ci-base:ghcup-arm64v8
  ghcr.io/donsbot/hsthrift/ci-base:ghcup-arm64v8

  /usr/bin/docker create .. --cpus 2 ... --entrypoint "tail" ghcr.io/donsbot/hsthrift/ci-base:ghcup-arm64v8 "-f" "/dev/null"
  a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef

  /usr/bin/docker start a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef
  a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef

  /usr/bin/docker ps --all --filter id=a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef --filter status=running --no-trunc --format "{{.ID}} {{.Status}}"
  a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef Up Less than a second

  /usr/bin/docker inspect --format "{{range .Config.Env}}{{println .}}{{end}}" a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef
  CI=true
  HOME=/github/home
  GITHUB_ACTIONS=true
  PATH=/root/.ghcup/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  TZ=Europe/London
  LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/x86_64-linux-gnu:

所以一切看起來都很好,很開心。 但由於 VM 未運行,該作業在第一個 exec 步驟中失敗。

來自守護程序的錯誤響應:容器 a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef 未運行

這可以在各種主機上本地成功運行。

問題

  • 我怎樣才能在這里調試容器發生了什么?
  • x86 Docker 容器在 GitHub 上通常支持多架構映像嗎? (其他例子)

相關工作

這個缺失的部分是標准 GitHub 'container' docker 引擎中的多架構支持。

我們可以手動調用新的 docker 容器中的交叉編譯步驟,而不是使用“容器”方法。 這是由 run-on-arch-action 自動完成的,它負責將 qemu 和 docker 放入正確的 state。

docker 運行 --rm --privileged multiarch/qemu-user-static --reset -p 是

https://github.com/uraimo/run-on-arch-action

在非 x86 上構建的 yml 文件現在看起來像:

 build-on-aarch64:
    runs-on: ubuntu-latest
    name: ci (arm64)
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Build in arm64 container
        uses: uraimo/run-on-arch-action@v2.1.1
        with:
          arch: aarch64
          distro: ubuntu20.04
          # Install deps into the container. With the token, the container will be cached
          # The image is cached publically like a package
          githubToken: ${{ github.token }}
          install: |
             .. install packages for the arm container (e.g. Dockerfile steps)
          run: |
             .. run build steps on the container

此操作實質上為我們構建了 Docker 映像,設置了 qemu,負責緩存它,並使用 GitHub 運行程序主機的正確仿真運行它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM