Skip to content

Ambiguous Podman Multi-Arch Build Output: Silent Single-Arch Image Creation #27211

@kaovilai

Description

@kaovilai

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:tag

Current 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:tag

Issues:

  1. Must use --manifest flag for multi-arch: While comma-separated --platform values work, using -t/--tag with multiple platforms only produces a single architecture image. You must use --manifest flag to create a multi-arch manifest.
  2. Different push command: Must use podman manifest push instead of podman push. Regular podman push only 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/--tag pattern 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:

  1. When -t/--tag is used with comma-separated --platform values, automatically create a manifest (instead of single arch)
  2. Make podman push detect 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:tag

This 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:

  1. Keep current workflow but improve documentation highlighting the differences and providing migration guides
  2. Add a compatibility flag like --docker-compat that enables Docker-like behavior
  3. Make -t an alias for --manifest when 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:

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.

Metadata

Metadata

Assignees

Labels

kind/featureCategorizes issue or PR as related to a new feature.macosMacOS (OSX) relatedtriagedIssue has been triaged

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions