Die Popularität von docker-compose macht seine Kompatibilität zu
einem entscheidenden Faktor für jede alternative Container-Engine.
Podman adressiert dieses Bedürfnis bewusst: Der Großteil der
Compose-Spezifikation wird unterstützt, und die Semantik der
docker-compose.yaml bleibt weitgehend erhalten.
Gleichzeitig gibt es fundamentale Unterschiede im Ausführungsmodell —
insbesondere, weil Podman Compose nicht auf einen Daemon setzt und
Compose-Services intern zu Pods gruppiert. Damit ist Podman Compose
ähnlich, aber eben nicht gleich. Für Architekten ist es wichtig zu
verstehen, wo die Grenzen liegen und welche Teile der bekannten
Compose-Logik unverändert genutzt werden können.
Podman Compose akzeptiert die gleichen YAML-Definitionen wie docker-compose. Die meisten Felder funktionieren identisch:
services, networks,
volumesenvironment, env_filebuild und dockerfileportsdepends_onsecrets, configs (eingeschränkt)healthcheckrestartFür viele Workflows bedeutet das: eine bestehende
docker-compose.yaml lässt sich direkt mit Podman Compose
starten, ohne Anpassungen.
In der Praxis heißt das: Kompatibilität im Format ja, Gleichheit im Verhalten nein.
Compose war ursprünglich ein Docker-spezifisches Werkzeug. Podman nutzt dieselben Felder, interpretiert sie aber in einem anderen Kontext: daemonlos, pod-basiert, systemnah.
Einige Beispiele:
ports werden an den Infrastrukturcontainer des Pods
statt an den Container gebundennetworks erzeugen Netavark-Netzwerke, die Pods
zugeordnet werdenrestart: wird nicht von einem Daemon kontrolliert,
sondern später von systemd (falls generiert)depends_on garantiert keine Startreihenfolge im
klassischen Docker-SinneDie YAML bleibt identisch, die Semantik ändert sich teilweise.
build: wird durch Podman/Buildah exakt so interpretiert
wie durch Docker.
Alle Varianten funktionieren:
environment:
- KEY=value
- OTHER=${ENVVAR}
Die Syntax ist identisch, nur die Implementierung liegt in Podman Storage statt im Docker Daemon.
Compose-Netzwerke werden zu Podman-Netzwerken übersetzt. Routing, Isolation und DNS entsprechen Podman-Semantik, aber die YAML funktioniert wie gewohnt.
Logging-Angaben werden akzeptiert, aber Podman nutzt keine Docker-spezifischen Logtreiber. Standard ist journald oder console, abhängig von der Umgebung.
Docker Compose delegiert Restart-Mechaniken an den Docker Daemon.
Podman Compose kann nur:
Ein Beispiel:
restart: always
funktioniert bei docker-compose unmittelbar. Bei Podman Compose wird
es erst mit podman generate systemd relevant.
Das ist kein Bug — es ist das Grundprinzip einer daemonlosen Engine.
Podman Compose implementiert den Compose-Standard größtenteils, aber nicht vollständig:
deploy:-Blöckesecrets: und
configs:deploy: ist besonders relevant: bei Docker Swarm wird es
aktiv genutzt, bei docker-compose ignoriert — und bei Podman Compose ist
es weitgehend wirkungslos.
Ein Compose-Projekt erzeugt mindestens einen Pod. Services werden nicht wie bei Docker nebeneinander gestellt, sondern gruppiert:
services:
app:
proxy:
db:
→ Docker: drei Container in einem Netzwerk → Podman: ein Pod, drei Container, ein Netzwerknamespace
Das Verhalten bleibt funktional ähnlich, aber die Laufzeitstruktur ist fundamental anders.
depends_on
ist nicht identischDocker Compose:
condition:)Podman Compose:
Für robuste Anwendungen spielt das selten eine Rolle, aber bei race conditions zwischen DB & App sollte man es bewusst berücksichtigen (z. B. über Wait-for-Skripte).
Compose-Syntax ist identisch:
ports:
- "8080:80"
Der Unterschied liegt nicht im YAML, sondern darin, dass die Ports an den Pod gebunden werden. Das führt manchmal zu Missverständnissen:
Doch funktional bleibt die Freigabe identisch.
Compose-Netzwerke werden sauber umgesetzt — nur mit Netavark statt mit Docker Bridges. Die meisten docker-compose Netzwerktopologien funktionieren sofort und unverändert.
Die Kompatibilität reicht für 90 % aller realen Projekte.
deploy:-Abschnitte)Für die meisten Architekturen ist das kein Problem — aber bei tiefer Integration in Docker-spezifische Infrastruktur sollte man genauer hinsehen.
Wenn die Compose-Datei:
→ Podman Compose funktioniert nahezu identisch.
Wenn die Compose-Datei:
deploy:-Policies enthält→ Anpassungen sind notwendig.
Podman Compose ist also kein Ersatz für Docker Compose — es ist dessen universelle Weiterentwicklung für eine daemonlose, Pod-basierte Welt, die sich stärker an Kubernetes annähert, ohne die Compose-Syntax aufzugeben.