How to Create a Multi-Arch Manifest List With docker manifest
When each architecture is built and pushed separately, docker manifest create stitches them into one tag that clients resolve to their platform.
If you build arm64 on a native arm runner and amd64 on an amd64 runner, you push two tags, then use docker manifest create to publish a single multi-arch tag pointing at both.
Steps
- Push each arch under its own tag (for example
:amd64and:arm64). - Run
docker manifest createreferencing both tags. - Push the manifest with
docker manifest push.
Terminal
Terminal
# After both per-arch images are pushed:
docker manifest create ghcr.io/acme/app:1.0 \
ghcr.io/acme/app:1.0-amd64 \
ghcr.io/acme/app:1.0-arm64
docker manifest annotate ghcr.io/acme/app:1.0 \
ghcr.io/acme/app:1.0-arm64 --arch arm64
docker manifest push ghcr.io/acme/app:1.0Gotchas
docker manifestis experimental; enable it withDOCKER_CLI_EXPERIMENTAL=enabledon older Docker.- Buildx with
--platformbuilds and pushes the manifest in one step, so reach fordocker manifestonly when arches are built separately.
Related guides
How to Build Multi-Arch Docker Images With BuildxBuild and push a single Docker image for linux/amd64 and linux/arm64 in one step using docker buildx and the…
How to Use QEMU Emulation for Arm Builds in CIRegister QEMU binfmt handlers with docker/setup-qemu-action so an amd64 GitHub Actions runner can build and r…