Skip to content
Latchkey

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-action to enable arm64 emulation.
  • Add docker/setup-buildx-action.
  • Set platforms: linux/amd64,linux/arm64 on 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 }}:latest

Gotchas

  • 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

Run this faster and cheaper on Latchkey managed runners. Start free →