-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Description
Feature request description
When migrating from Docker to Podman, the multi-arch build workflow has several differences that create friction for users familiar with Docker's approach. While these are not functional blockers, they significantly impact ease of use and require rewriting existing build scripts.
Current Docker workflow:
# Single command builds all platforms into a multi-arch image
docker buildx build --platform linux/amd64,linux/arm64 -t myimage:tag .
# Push works as expected
docker push myimage:tagCurrent Podman workflow:
# Comma-separated platforms work, but require --manifest flag to create multi-arch image
# Using -t with multiple platforms only produces single arch image
podman build --platform linux/amd64,linux/arm64 --manifest myimage .
# Must use 'manifest push' subcommand instead of regular push
# Regular 'podman push' only pushes single arch
podman manifest push myimage docker://registry/myimage:tagIssues:
- Must use
--manifestflag for multi-arch: While comma-separated--platformvalues work, using-t/--tagwith multiple platforms only produces a single architecture image. You must use--manifestflag to create a multi-arch manifest. - Different push command: Must use
podman manifest pushinstead ofpodman push. Regularpodman pushonly pushes single arch even if the local image is a manifest.
Impact:
- Existing Dockerfiles and CI/CD scripts need modification
- Mental model shift required for users familiar with Docker
- Cannot use same
-t/--tagpattern for both single-arch and multi-arch builds - Documentation and training materials need updates
- Harder to switch between Docker and Podman in mixed environments
Suggest potential solution
Consider adding Docker CLI compatibility mode for multi-arch builds:
- When
-t/--tagis used with comma-separated--platformvalues, automatically create a manifest (instead of single arch) - Make
podman pushdetect if the image is a manifest and automatically use manifest push logic
Example improved workflow:
# Works like Docker - automatically creates manifest when multiple platforms specified
podman build --platform linux/amd64,linux/arm64 -t myimage:tag .
# Push automatically detects manifest and pushes multi-arch
podman push myimage:tagThis would maintain backward compatibility with the current --manifest workflow while providing a more familiar interface for Docker users.
Have you considered any alternatives?
Alternative approaches:
- Keep current workflow but improve documentation highlighting the differences and providing migration guides
- Add a compatibility flag like
--docker-compatthat enables Docker-like behavior - Make
-tan alias for--manifestwhen multiple platforms are specified
However, these don't fully address the friction point of having to remember different commands for single-arch vs multi-arch workflows.
Additional context
Environment:
Client: Podman Engine
Version: 5.6.0
API Version: 5.6.0
Go Version: go1.25.0
Git Commit: da671ef6cfa3fc9ac6225c18f1dd0a70a951e43f
Built: Fri Aug 15 11:42:23 2025
Build Origin: pkginstaller
OS/Arch: darwin/arm64
Server: Podman Engine
Version: 5.5.2
API Version: 5.5.2
Go Version: go1.23.10
Git Commit: e7d8226745ba07a64b7176a7f128e4ef53225a0e
Built: Mon Jun 23 20:00:00 2025
OS/Arch: linux/arm64
Related issues:
- Building multi-arch with podman appears to result in a pushed image with only one arch #13676 - Building multi-arch with podman
- Accept --arch based on uname -m names (ie x86_64/aarch64) in addition to GOARCH like arch (ie amd64/arm64) #12680 - Accept --arch based on uname -m names
- Podman manifest create for image list/index produces docker v2s2 format only #21294 - Podman manifest create format concerns
This is primarily an ease-of-use and migration concern, not a functional limitation. The functionality exists, but the UX differs from Docker in ways that create unnecessary friction for users migrating their workflows.