How to Push a Multi-Arch Image Manifest From CI
A single build-push-action step with platforms set pushes one manifest list covering every architecture.
Add docker/setup-qemu-action for emulation, then set platforms: linux/amd64,linux/arm64 on docker/build-push-action. Buildx assembles the manifest list.
Steps
- Add
docker/setup-qemu-actionto enable arm64 emulation. - Add
docker/setup-buildx-action. - Set
platforms: linux/amd64,linux/arm64on the build step.
Workflow
.github/workflows/ci.yml
steps:
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v6
with:
context: .
push: true
platforms: linux/amd64,linux/arm64
tags: ghcr.io/${{ github.repository }}:latestGotchas
- Emulated arm64 builds are slower; use a native arm64 runner where possible.
- Consumers pulling the tag automatically get the manifest entry for their platform.
Related guides
How to Build and Push an Image With Buildx in CIBuild and push a container image in one GitHub Actions step with docker/setup-buildx-action and docker/build-…
How to Cache Build Layers to a Registry in CISpeed up Docker builds in GitHub Actions by exporting BuildKit layer cache to a registry with cache-to and ca…