我维护了一个docker镜像,打包了一个著名的漫画库程序。我将此图像设计为多体系结构响应式,具有两个不同版本的捆绑软件(一个使用
p7zip
进行解压,一个使用unarr
,每个版本三个不同的 Dockerfile(amd64、arm63v8 和 arm32v7)。我使用 Github Actions 工作流在创建新的 GitHub 版本时构建并将每个图像推送到 Docker Hub 和 Github 容器注册表,然后创建并推送一个清单,将不同的图像标签捆绑在元标签下latest
, unarr
, p7zip
。直到最近,这个工作流程还没有任何问题,但由于某种原因,我的工作流程的 push-manifest
部分在我最新的版本中开始失败。在 Github 运行器上运行的 docker 命令行似乎是尽管我在工作流程中设置了 QEMU 和 Buildx,但无法提取非 amd64 图像。有什么办法可以解决这个问题吗?
这是工作流失败部分的错误日志:
Run docker pull ***/yacreaderlibrary-server-docker:unarr-amd64
docker pull ***/yacreaderlibrary-server-docker:unarr-amd64
docker pull ***/yacreaderlibrary-server-docker:unarr-arm64v8
docker pull ***/yacreaderlibrary-server-docker:unarr-arm32v7
docker pull ***/yacreaderlibrary-server-docker:latest-amd64
docker pull ***/yacreaderlibrary-server-docker:latest-arm64v8
docker pull ***/yacreaderlibrary-server-docker:latest-arm32v7
docker pull ***/yacreaderlibrary-server-docker:p7zip-amd64
docker pull ***/yacreaderlibrary-server-docker:p7zip-arm64v8
docker pull ***/yacreaderlibrary-server-docker:p7zip-arm32v7
docker manifest create ***/yacreaderlibrary-server-docker:unarr ***/yacreaderlibrary-server-docker:unarr-amd64 ***/yacreaderlibrary-server-docker:unarr-arm64v8 ***/yacreaderlibrary-server-docker:unarr-arm32v7
docker manifest annotate ***/yacreaderlibrary-server-docker:unarr ***/yacreaderlibrary-server-docker:unarr-amd64 --arch amd64
docker manifest annotate ***/yacreaderlibrary-server-docker:unarr ***/yacreaderlibrary-server-docker:unarr-arm64v8 --arch arm64
docker manifest annotate ***/yacreaderlibrary-server-docker:unarr ***/yacreaderlibrary-server-docker:unarr-arm32v7 --arch arm
docker manifest push ***/yacreaderlibrary-server-docker:unarr
docker manifest create ***/yacreaderlibrary-server-docker:p7zip ***/yacreaderlibrary-server-docker:p7zip-amd64 ***/yacreaderlibrary-server-docker:p7zip-arm64v8 ***/yacreaderlibrary-server-docker:p7zip-arm32v7
docker manifest annotate ***/yacreaderlibrary-server-docker:p7zip ***/yacreaderlibrary-server-docker:p7zip-amd64 --arch amd64
docker manifest annotate ***/yacreaderlibrary-server-docker:p7zip ***/yacreaderlibrary-server-docker:p7zip-arm64v8 --arch arm64
docker manifest annotate ***/yacreaderlibrary-server-docker:p7zip ***/yacreaderlibrary-server-docker:p7zip-arm32v7 --arch arm
docker manifest push ***/yacreaderlibrary-server-docker:p7zip
docker manifest create ***/yacreaderlibrary-server-docker:latest ***/yacreaderlibrary-server-docker:latest-amd64 ***/yacreaderlibrary-server-docker:latest-arm64v8 ***/yacreaderlibrary-server-docker:latest-arm32v7
docker manifest annotate ***/yacreaderlibrary-server-docker:latest ***/yacreaderlibrary-server-docker:latest-amd64 --arch amd64
docker manifest annotate ***/yacreaderlibrary-server-docker:latest ***/yacreaderlibrary-server-docker:latest-arm64v8 --arch arm64
docker manifest annotate ***/yacreaderlibrary-server-docker:latest ***/yacreaderlibrary-server-docker:latest-arm32v7 --arch arm
docker manifest push ***/yacreaderlibrary-server-docker:latest
docker pull ***/yacreaderlibrary-server-docker:v1.4.0-amd64
docker pull ***/yacreaderlibrary-server-docker:v1.4.0-arm64v8
docker pull ***/yacreaderlibrary-server-docker:v1.4.0-arm32v7
docker manifest create ***/yacreaderlibrary-server-docker:v1.4.0 ***/yacreaderlibrary-server-docker:v1.4.0-amd64 ***/yacreaderlibrary-server-docker:v1.4.0-arm64v8 ***/yacreaderlibrary-server-docker:v1.4.0-arm32v7
docker manifest annotate ***/yacreaderlibrary-server-docker:v1.4.0 ***/yacreaderlibrary-server-docker:v1.4.0-amd64 --arch amd64
docker manifest annotate ***/yacreaderlibrary-server-docker:v1.4.0 ***/yacreaderlibrary-server-docker:v1.4.0-arm64v8 --arch arm64
docker manifest annotate ***/yacreaderlibrary-server-docker:v1.4.0 ***/yacreaderlibrary-server-docker:v1.4.0-arm32v7 --arch arm
docker manifest push ***/yacreaderlibrary-server-docker:v1.4.0
shell: /usr/bin/bash -e {0}
env:
DOCKERHUB_SLUG: ***/yacreaderlibrary-server-docker
GHCR_SLUG: ghcr.io/***/yacreaderlibrary-server-docker
DOCKER_METADATA_OUTPUT_VERSION: v1.4.0
DOCKER_METADATA_OUTPUT_TAGS: ghcr.io/***/yacreaderlibrary-server-docker:v1.4.0
DOCKER_METADATA_OUTPUT_LABELS: org.opencontainers.image.title=yacreaderlibrary-server-docker
org.opencontainers.image.description=Docker image running a headless version of YACReaderLibraryServer 📦
org.opencontainers.image.url=https://github.com/***/yacreaderlibrary-server-docker
org.opencontainers.image.source=https://github.com/***/yacreaderlibrary-server-docker
org.opencontainers.image.version=v1.4.0
org.opencontainers.image.created=2023-03-31T17:49:43.131Z
org.opencontainers.image.revision=6b991e77e2d8b4ca51eec334f3ea18cf3d9b2aba
org.opencontainers.image.licenses=GPL-3.0
DOCKER_METADATA_OUTPUT_JSON: {"tags":["ghcr.io/***/yacreaderlibrary-server-docker:v1.4.0"],"labels":{"org.opencontainers.image.title":"yacreaderlibrary-server-docker","org.opencontainers.image.description":"Docker image running a headless version of YACReaderLibraryServer 📦","org.opencontainers.image.url":"https://github.com/***/yacreaderlibrary-server-docker","org.opencontainers.image.source":"https://github.com/***/yacreaderlibrary-server-docker","org.opencontainers.image.version":"v1.4.0","org.opencontainers.image.created":"2023-03-31T17:49:43.131Z","org.opencontainers.image.revision":"6b991e77e2d8b4ca51eec334f3ea18cf3d9b2aba","org.opencontainers.image.licenses":"GPL-3.0"}}
DOCKER_METADATA_OUTPUT_BAKE_FILE: /tmp/docker-metadata-action-QrbYCu/docker-metadata-action-bake.json
unarr-amd64: Pulling from ***/yacreaderlibrary-server-docker
38a8b9979b0c: Pulling fs layer
48f754c837b5: Pulling fs layer
e62f0384a36b: Pulling fs layer
776e56018534: Pulling fs layer
22883c3dda69: Pulling fs layer
2d428c86948e: Pulling fs layer
22b0bae01498: Pulling fs layer
776e56018534: Waiting
22883c3dda69: Waiting
22b0bae01498: Waiting
2d428c86948e: Waiting
48f754c837b5: Verifying Checksum
48f754c837b5: Download complete
e62f0384a36b: Download complete
22883c3dda69: Verifying Checksum
22883c3dda69: Download complete
776e56018534: Verifying Checksum
776e56018534: Download complete
38a8b9979b0c: Verifying Checksum
38a8b9979b0c: Download complete
22b0bae01498: Verifying Checksum
22b0bae01498: Download complete
38a8b9979b0c: Pull complete
48f754c837b5: Pull complete
e62f0384a36b: Pull complete
2d428c86948e: Verifying Checksum
2d428c86948e: Download complete
776e56018534: Pull complete
22883c3dda69: Pull complete
2d428c86948e: Pull complete
22b0bae01498: Pull complete
Digest: sha256:c9ec7712740535ef92317ee93626cbd46e2a0c369a034799e3707558fa6899da
Status: Downloaded newer image for ***/yacreaderlibrary-server-docker:unarr-amd64
docker.io/***/yacreaderlibrary-server-docker:unarr-amd64
unarr-arm64v8: Pulling from ***/yacreaderlibrary-server-docker
no matching manifest for linux/amd64 in the manifest list entries
Error: Process completed with exit code 1.
这是我的工作流程:
---
# Builds our multi-arch Docker images for p7zip and unarr versions of YACReaderLibraryServer
name: Build and push images
on:
release:
types: [published]
workflow_dispatch:
env:
DOCKERHUB_SLUG: xthursdayx/yacreaderlibrary-server-docker
GHCR_SLUG: ghcr.io/xthursdayx/yacreaderlibrary-server-docker
jobs:
build-unarr-amd64:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Docker meta
id: dh-meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.DOCKERHUB_SLUG }}
flavor: latest=false
tags: |
type=ref,event=tag
- name: Docker meta
id: gh-meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.GHCR_SLUG }}
flavor: latest=false
tags: |
type=ref,event=tag
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Dockerhub
uses: docker/login-action@v2
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push container image
uses: docker/build-push-action@v4
with:
context: unarr
file: unarr/Dockerfile
platforms: linux/amd64
push: true
tags: |
${{ env.DOCKERHUB_SLUG }}:unarr-amd64
${{ env.DOCKERHUB_SLUG }}:latest-amd64
${{ env.GHCR_SLUG }}:unarr-amd64
${{ env.GHCR_SLUG }}:latest-amd64
${{ steps.dh-meta.outputs.tags }}-amd64
${{ steps.gh-meta.outputs.tags }}-amd64
labels: ${{ steps.dh-meta.outputs.labels }}
build-unarr-arm64v8:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Docker meta
id: dh-meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.DOCKERHUB_SLUG }}
flavor: latest=false
tags: |
type=ref,event=tag
- name: Docker meta
id: gh-meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.GHCR_SLUG }}
flavor: latest=false
tags: |
type=ref,event=tag
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Dockerhub
uses: docker/login-action@v2
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push container image
uses: docker/build-push-action@v4
with:
push: true
context: unarr
file: unarr/Dockerfile.aarch64
platforms: linux/arm64/v8
tags: |
${{ env.DOCKERHUB_SLUG }}:unarr-arm64v8
${{ env.DOCKERHUB_SLUG }}:latest-arm64v8
${{ env.GHCR_SLUG }}:unarr-arm64v8
${{ env.GHCR_SLUG }}:latest-arm64v8
${{ steps.dh-meta.outputs.tags }}-arm64v8
${{ steps.gh-meta.outputs.tags }}-arm64v8
labels: ${{ steps.dh-meta.outputs.labels }}
build-unarr-arm32v7:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Docker meta
id: dh-meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.DOCKERHUB_SLUG }}
flavor: latest=false
tags: |
type=ref,event=tag
- name: Docker meta
id: gh-meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.GHCR_SLUG }}
flavor: latest=false
tags: |
type=ref,event=tag
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Dockerhub
uses: docker/login-action@v2
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push container image
uses: docker/build-push-action@v4
with:
push: true
context: unarr
file: unarr/Dockerfile.armhf
platforms: linux/arm/v7
tags: |
${{ env.DOCKERHUB_SLUG }}:unarr-arm32v7
${{ env.DOCKERHUB_SLUG }}:latest-arm32v7
${{ env.GHCR_SLUG }}:unarr-arm32v7
${{ env.GHCR_SLUG }}:latest-arm32v7
${{ steps.dh-meta.outputs.tags }}-arm32v7
${{ steps.gh-meta.outputs.tags }}-arm32v7
labels: ${{ steps.dh-meta.outputs.labels }}
build-p7zip-amd64:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Dockerhub
uses: docker/login-action@v2
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push container image
uses: docker/build-push-action@v4
with:
push: true
context: p7zip
file: p7zip/Dockerfile
platforms: linux/amd64
tags: |
${{ env.DOCKERHUB_SLUG }}:p7zip-amd64
${{ env.GHCR_SLUG }}:p7zip-amd64
build-p7zip-arm64v8:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Dockerhub
uses: docker/login-action@v2
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push container image
uses: docker/build-push-action@v4
with:
push: true
context: p7zip
file: p7zip/Dockerfile.aarch64
platforms: linux/arm64/v8
tags: |
${{ env.DOCKERHUB_SLUG }}:p7zip-arm64v8
${{ env.GHCR_SLUG }}:p7zip-arm64v8
build-p7zip-arm32v7:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Dockerhub
uses: docker/login-action@v2
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push container image
uses: docker/build-push-action@v4
with:
push: true
context: p7zip
file: p7zip/Dockerfile.armhf
platforms: linux/arm/v7
tags: |
${{ env.DOCKERHUB_SLUG }}:p7zip-arm32v7
${{ env.GHCR_SLUG }}:p7zip-arm32v7
push-manifest:
needs: [build-unarr-amd64, build-unarr-arm64v8, build-unarr-arm32v7, build-p7zip-amd64, build-p7zip-arm64v8, build-p7zip-arm32v7]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Docker meta
id: dh-meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.DOCKERHUB_SLUG }}
flavor: latest=false
tags: |
type=ref,event=tag
- name: Docker meta
id: gh-meta
uses: docker/metadata-action@v4
with:
images: |
${{ env.GHCR_SLUG }}
flavor: latest=false
tags: |
type=ref,event=tag
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Dockerhub
uses: docker/login-action@v2
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create manifest for multi-arch images @ Docker Hub
run: |
docker pull ${{ env.DOCKERHUB_SLUG }}:unarr-amd64
docker pull ${{ env.DOCKERHUB_SLUG }}:unarr-arm64v8
docker pull ${{ env.DOCKERHUB_SLUG }}:unarr-arm32v7
docker pull ${{ env.DOCKERHUB_SLUG }}:latest-amd64
docker pull ${{ env.DOCKERHUB_SLUG }}:latest-arm64v8
docker pull ${{ env.DOCKERHUB_SLUG }}:latest-arm32v7
docker pull ${{ env.DOCKERHUB_SLUG }}:p7zip-amd64
docker pull ${{ env.DOCKERHUB_SLUG }}:p7zip-arm64v8
docker pull ${{ env.DOCKERHUB_SLUG }}:p7zip-arm32v7
docker manifest create ${{ env.DOCKERHUB_SLUG }}:unarr ${{ env.DOCKERHUB_SLUG }}:unarr-amd64 ${{ env.DOCKERHUB_SLUG }}:unarr-arm64v8 ${{ env.DOCKERHUB_SLUG }}:unarr-arm32v7
docker manifest annotate ${{ env.DOCKERHUB_SLUG }}:unarr ${{ env.DOCKERHUB_SLUG }}:unarr-amd64 --arch amd64
docker manifest annotate ${{ env.DOCKERHUB_SLUG }}:unarr ${{ env.DOCKERHUB_SLUG }}:unarr-arm64v8 --arch arm64
docker manifest annotate ${{ env.DOCKERHUB_SLUG }}:unarr ${{ env.DOCKERHUB_SLUG }}:unarr-arm32v7 --arch arm
docker manifest push ${{ env.DOCKERHUB_SLUG }}:unarr
docker manifest create ${{ env.DOCKERHUB_SLUG }}:p7zip ${{ env.DOCKERHUB_SLUG }}:p7zip-amd64 ${{ env.DOCKERHUB_SLUG }}:p7zip-arm64v8 ${{ env.DOCKERHUB_SLUG }}:p7zip-arm32v7
docker manifest annotate ${{ env.DOCKERHUB_SLUG }}:p7zip ${{ env.DOCKERHUB_SLUG }}:p7zip-amd64 --arch amd64
docker manifest annotate ${{ env.DOCKERHUB_SLUG }}:p7zip ${{ env.DOCKERHUB_SLUG }}:p7zip-arm64v8 --arch arm64
docker manifest annotate ${{ env.DOCKERHUB_SLUG }}:p7zip ${{ env.DOCKERHUB_SLUG }}:p7zip-arm32v7 --arch arm
docker manifest push ${{ env.DOCKERHUB_SLUG }}:p7zip
docker manifest create ${{ env.DOCKERHUB_SLUG }}:latest ${{ env.DOCKERHUB_SLUG }}:latest-amd64 ${{ env.DOCKERHUB_SLUG }}:latest-arm64v8 ${{ env.DOCKERHUB_SLUG }}:latest-arm32v7
docker manifest annotate ${{ env.DOCKERHUB_SLUG }}:latest ${{ env.DOCKERHUB_SLUG }}:latest-amd64 --arch amd64
docker manifest annotate ${{ env.DOCKERHUB_SLUG }}:latest ${{ env.DOCKERHUB_SLUG }}:latest-arm64v8 --arch arm64
docker manifest annotate ${{ env.DOCKERHUB_SLUG }}:latest ${{ env.DOCKERHUB_SLUG }}:latest-arm32v7 --arch arm
docker manifest push ${{ env.DOCKERHUB_SLUG }}:latest
docker pull ${{ steps.dh-meta.outputs.tags }}-amd64
docker pull ${{ steps.dh-meta.outputs.tags }}-arm64v8
docker pull ${{ steps.dh-meta.outputs.tags }}-arm32v7
docker manifest create ${{ steps.dh-meta.outputs.tags }} ${{ steps.dh-meta.outputs.tags }}-amd64 ${{ steps.dh-meta.outputs.tags }}-arm64v8 ${{ steps.dh-meta.outputs.tags }}-arm32v7
docker manifest annotate ${{ steps.dh-meta.outputs.tags }} ${{ steps.dh-meta.outputs.tags }}-amd64 --arch amd64
docker manifest annotate ${{ steps.dh-meta.outputs.tags }} ${{ steps.dh-meta.outputs.tags }}-arm64v8 --arch arm64
docker manifest annotate ${{ steps.dh-meta.outputs.tags }} ${{ steps.dh-meta.outputs.tags }}-arm32v7 --arch arm
docker manifest push ${{ steps.dh-meta.outputs.tags }}
- name: Create manifest for multi-arch images @ GHCR
run: |
docker pull ${{ env.GHCR_SLUG }}:unarr-amd64
docker pull ${{ env.GHCR_SLUG }}:unarr-arm64v8
docker pull ${{ env.GHCR_SLUG }}:unarr-arm32v7
docker pull ${{ env.GHCR_SLUG }}:latest-amd64
docker pull ${{ env.GHCR_SLUG }}:latest-arm64v8
docker pull ${{ env.GHCR_SLUG }}:latest-arm32v7
docker pull ${{ env.GHCR_SLUG }}:p7zip-amd64
docker pull ${{ env.GHCR_SLUG }}:p7zip-arm64v8
docker pull ${{ env.GHCR_SLUG }}:p7zip-arm32v7
docker manifest create ${{ env.GHCR_SLUG }}:unarr ${{ env.GHCR_SLUG }}:unarr-amd64 ${{ env.GHCR_SLUG }}:unarr-arm64v8 ${{ env.GHCR_SLUG }}:unarr-arm32v7
docker manifest annotate ${{ env.GHCR_SLUG }}:unarr ${{ env.GHCR_SLUG }}:unarr-amd64 --arch amd64
docker manifest annotate ${{ env.GHCR_SLUG }}:unarr ${{ env.GHCR_SLUG }}:unarr-arm64v8 --arch arm64
docker manifest annotate ${{ env.GHCR_SLUG }}:unarr ${{ env.GHCR_SLUG }}:unarr-arm32v7 --arch arm
docker manifest push ${{ env.GHCR_SLUG }}:unarr
docker manifest create ${{ env.GHCR_SLUG }}:p7zip ${{ env.GHCR_SLUG }}:p7zip-amd64 ${{ env.GHCR_SLUG }}:p7zip-arm64v8 ${{ env.GHCR_SLUG }}:p7zip-arm32v7
docker manifest annotate ${{ env.GHCR_SLUG }}:p7zip ${{ env.GHCR_SLUG }}:p7zip-amd64 --arch amd64
docker manifest annotate ${{ env.GHCR_SLUG }}:p7zip ${{ env.GHCR_SLUG }}:p7zip-arm64v8 --arch arm64
docker manifest annotate ${{ env.GHCR_SLUG }}:p7zip ${{ env.GHCR_SLUG }}:p7zip-arm32v7 --arch arm
docker manifest push ${{ env.GHCR_SLUG }}:p7zip
docker manifest create ${{ env.GHCR_SLUG }}:latest ${{ env.GHCR_SLUG }}:latest-amd64 ${{ env.GHCR_SLUG }}:latest-arm64v8 ${{ env.GHCR_SLUG }}:latest-arm32v7
docker manifest annotate ${{ env.GHCR_SLUG }}:latest ${{ env.GHCR_SLUG }}:latest-amd64 --arch amd64
docker manifest annotate ${{ env.GHCR_SLUG }}:latest ${{ env.GHCR_SLUG }}:latest-arm64v8 --arch arm64
docker manifest annotate ${{ env.GHCR_SLUG }}:latest ${{ env.GHCR_SLUG }}:latest-arm32v7 --arch arm
docker manifest push ${{ env.GHCR_SLUG }}:latest
docker pull ${{ steps.gh-meta.outputs.tags }}-amd64
docker pull ${{ steps.gh-meta.outputs.tags }}-arm64v8
docker pull ${{ steps.gh-meta.outputs.tags }}-arm32v7
docker manifest create ${{ steps.gh-meta.outputs.tags }} ${{ steps.gh-meta.outputs.tags }}-amd64 ${{ steps.gh-meta.outputs.tags }}-arm64v8 ${{ steps.gh-meta.outputs.tags }}-arm32v7
docker manifest annotate ${{ steps.gh-meta.outputs.tags }} ${{ steps.gh-meta.outputs.tags }}-amd64 --arch amd64
docker manifest annotate ${{ steps.gh-meta.outputs.tags }} ${{ steps.gh-meta.outputs.tags }}-arm64v8 --arch arm64
docker manifest annotate ${{ steps.gh-meta.outputs.tags }} ${{ steps.gh-meta.outputs.tags }}-arm32v7 --arch arm
docker manifest push ${{ steps.gh-meta.outputs.tags }}
这是由 docker 添加证明元数据 到图像的方式触发的。通过从映像清单切换到具有单一平台映像和
unknown/unknown
平台证明的多平台清单,如果没有其他选项,来自不同平台的 docker pull 将不再有效。
你可以:
attests: false
在每个构建中,请参阅 build-push-action 中的选项)。--platform ...
按平台拉动图像。就我个人而言,我会选择方法 3,因为它更简洁,但这将需要对您的 Dockerfile 进行一些重新设计,因此它们不是特定于平台的。
我还编写了一个名为 regclient 的工具,带有
regctl index create
和 --ref
选项列表的 --platform
命令可能会更快,因为它可以避免拉取(所有 blob 都保留在注册表中)。