// Vergleich · Docker · Podman

Podman Compose vs. Docker Compose

📅 05.09.2026 ⏱ 9 Min. Lesezeit ✍️ Redaktion

Docker Compose ist der De-facto-Standard für Multi-Container-Setups – Podman rückt mit „daemonless“ und „rootless“ an und verspricht dieselbe Datei, denselben Befehl, weniger Privilegien. Wie groß der Unterschied in der Praxis wirklich ist, welche Werkzeuge sich hinter „Podman Compose“ verstecken und ab wann sich der Wechsel lohnt, klärt dieser Vergleich.

Warum überhaupt vergleichen?

Docker hat die Container-Welt geprägt – und Podman hat sich in wenigen Jahren von einer Red-Hat-Nische zum ernsthaften Kandidaten entwickelt. Wer heute ein neues Self-Hosted-Setup aufsetzt, steht vor der Frage: Docker Compose, wie es in den meisten Tutorials steht – oder Podman mit seinen Versprechen „daemonless“, „rootless“ und „voll kompatibel“? Die Antwort hängt weniger von der Datei ab als von der Umgebung, in der du läufst.

Konzept: Daemon vs. daemonless

  • Docker arbeitet klassisch mit einem zentralen Daemon (dockerd), der als Root läuft; alle Clients sprechen mit ihm über den Docker-Socket.
  • Podman kommt ohne Daemon aus: Jede Operation startet einen eigenen Prozess („fork-exec“), Container laufen standardmäßig rootless in User-Namespaces.
  • Sicherheitsmodell: Rootless heißt nicht automatisch sicherer, reduziert aber die Angriffsfläche – ein kompromittierter Container hat nur die Rechte deines Users.
  • Systemd-Integration: Podman ist für systemd-Linuxe gedacht (Quadlet); Docker setzt eher auf eigene Restart-Policies und Compose.
  • Lizenz-Ebene: Docker Engine ist Open Source (Apache-2.0); Docker Desktop ist für größere Unternehmen kostenpflichtig. Podman ist durchgehend Open Source.

Verwirrung um „Podman Compose“

„Podman Compose“ ist leider kein einzelnes Werkzeug – dahinter stecken zwei verschiedene Ansätze, die man leicht verwechselt:

WerkzeugWas es istKompatibilität
docker compose (Plugin)Das offizielle Compose v2 (Go) – läuft direkt gegen den originalen Docker-Daemon.Referenz – vollständige und echte Compose-Spec.
podman composeEin von Podman mitgelieferter Wrapper-Befehl, der im Hintergrund das originale Docker-Compose-Plugin aufruft und auf den Podman-Socket umleitet.Sehr hoch – verhält sich in 99 % der Fälle identisch zur Docker-Variante.
podman-composeEine eigenständige Python-Implementierung der Podman-Community – arbeitet ohne Socket und übersetzt Compose-Dateien direkt in Podman-CLI-Befehle.Teilmenge – unterstützt manche modernen Spec-Features (wie komplexe Secrets oder Profiles) nicht zuverlässig.
QuadletPodman-nativ: Compose-Dateien oder Container als systemd-Units (.container).Kein Compose – dafür echte Systemd-Integration.
Empfehlung für den Einstieg: docker-compose v2 installieren und podman compose up nutzen – so bleiben deine Tutorials und Dateien nahezu unverändert lauffähig.

Die Kernunterschiede in der Tabelle

KriteriumDocker ComposePodman (+ Compose)
ArchitekturZentraler Daemon (dockerd)Daemonless, Fork-Exec-Modell
RootlessMöglich, aber nicht StandardStandard seit Version 1
Systemd-IntegrationUmweg über Compose-WrapperQuadlet direkt (User-Units!)
NetzwerkBridge/iptables, ausgereiftNetavark + pasta/slirp4netns (rootless)
SELinux-Hosts (Fedora/RHEL)Labels ggf. via :z:Z/:z nötig, sonst Block
Ports < 1024 (rootless)Nur mit Root-Daemon/rootless-DockerNur via rootful Podman oder Proxy
Compose-SpecVollständig (deploy, secrets, profiles …)Über docker-compose v2 fast vollständig; podman-compose nur teilweise
Ökosystem-ToolsPortainer, Watchtower, Uptime Kuma nativHäufig über Podman-Agent/Socket kompatibel, teils mit Einschränkungen

Funktioniert dieselbe Compose-Datei?

In den allermeisten Fällen: ja. Eine compose.yaml ohne Docker-spezifische Extras läuft mit docker compose up -d und podman compose up -d identisch – vorausgesetzt, der docker-compose-Binary ist installiert und der Podman-Socket aktiv:

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
# Docker:
docker compose up -d

# Podman (gleiche Datei):
podman compose up -d
Die drei häufigsten Anpassungen beim Wechsel: ① Auf SELinux-Systemen (Fedora, RHEL) Volume-Mounts um :z bzw. :Z ergänzen. ② Rootless keine Ports unter 1024 – also nicht 80:80, sondern 8080:80 + Proxy. ③ Das veraltete version:-Schlüsselwort aus alten Dateien entfernen – beide Werkzeuge ignorieren es heute.

Migration von Docker zu Podman

  • Aliase: alias docker=podman deckt den Alltag ab – die meisten CLI-Befehle sind kompatibel.
  • Socket aktivieren: systemctl --user enable --now podman.socket – danach funktioniert docker compose (und Tools wie Portainer-Agent) gegen Podman.
  • Bestand übernehmen: Volumes und Images weiterverwenden – die Ordner liegen nur woanders (~/.local/share/containers); ein podman pull lädt dieselben OCI-Images.
  • Mac/Windows: podman machine startet eine VM – Docker Desktop-Nutzer finden sich schnell zurecht.
  • Nicht alles ist 1:1: Container-Attach, Logs und Stats funktionieren, aber Host-Integrationen (z. B. Docker-Socket-Mounts in Compose) musst du einzeln prüfen.

Quadlet: die Podman-native Alternative

Wer unter systemd lebt, braucht womöglich gar kein Compose: Quadlet wandelt Container-Definitionen in echte Systemd-Units um – mit Autostart, Abhängigkeiten und Journal-Logs. Einzelne Container schreibst du als myapp.container:

[Unit]
Description=Meine kleine Website

[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80
Volume=%h/html:/usr/share/nginx/html:ro

[Service]
Restart=always

[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now myapp
Kombo: Compose für Stacks mit mehreren Diensten (Nextcloud, Mailserver …), Quadlet für einzelne kleine Container – beides koexistiert problemlos unter Podman.

Fallstricke aus der Praxis

  • Netzwerk-DNS: Rootless-Netzwerke nutzen teils andere DNS-Wege – Service-Namen aus Compose funktionieren, aber manche Host-Netzwerkkonfigurationen nicht wie unter Docker.
  • deploy.resources.limits: docker compose v2 setzt diese um; podman-compose (Python) ignoriert sie oft – Limits dann lieber als --memory/Quadlet setzen.
  • Watchtower & Co.: Tools, die den Docker-Socket brauchen, laufen gegen den Podman-Socket meist, aber nicht immer – bei Problemen den Podman-Agent-Ansatz prüfen.
  • SELinux: Ohne :z/:Z erscheinen Mounts leer oder die Container starten nicht – der Klassiker auf Fedora-Servern.
  • Builds: build:-Blöcke funktionieren in beiden, aber Podman nutzt seinen eigenen Builder (Buildah) – manche Dockerfile-Spezialitäten unterscheiden sich minimal.

Häufige Fragen (FAQ)

FrageAntwort
Kann ich meine Compose-Dateien behalten?Ja – im Normalfall unverändert. SELinux-Labels und Rootless-Ports sind die einzigen Klassiker.
Ist Podman wirklich sicherer?Rootless reduziert die Angriffsfläche deutlich; „sicherer“ hängt aber immer vom Setup ab (Seccomp, Capabilities, Updates).
Was ist mit Portainer/Watchtower?Funktioniert teils über den Podman-Socket bzw. Podman-Agent – nicht jede Funktion ist identisch, vor dem Umzug testen.
Lohnt sich der Wechsel fürs Homelab?Wenn du auf Debian/Ubuntu mit Docker zufrieden bist: nein, kein Zwang. Auf Fedora/RHEL oder bei Rootless-/Systemd-Fokus: Podman ist die natürlichere Wahl.
Docker Desktop vs. Podman?Für Firmen mit Lizenzpflicht ist Podman (auch mit podman machine) eine kostenfreie Alternative – für Privatnutzer bleibt Docker Desktop ebenfalls kostenlos.
podman-compose oder docker-compose gegen Podman?Für maximale Kompatibilität: docker-compose v2 + podman compose. podman-compose nur, wenn du bewusst auf seine Einfachheit setzt.

Fazit

Datei-technisch sind sich beide Seiten heute so ähnlich, dass die Entscheidung fast nie an der compose.yaml hängt, sondern am Betriebssystem und am Sicherheitsmodell: Auf Fedora, RHEL & Co. oder mit Rootless-/Systemd-Fokus ist Podman die runde Lösung – auf klassischen Debian-Servern mit etablierten Tools bleibt Docker Compose die pragmatische Wahl. Wer beides kann, ist für jedes Projekt gerüstet.

Die vier Merksätze: ① Compose-Dateien sind weitgehend austauschbar. ② „Podman Compose“ = docker-compose v2 über den Podman-Socket (empfohlen). ③ SELinux-Labels und Rootless-Ports sind die typischen Stolpersteine. ④ Quadlet ersetzt Compose nur, wenn du systemd ohnehin als Basis nutzt.
📝
....

Wir betreiben unsere komplette Infrastruktur selbst auf Open-Source-Software und schreiben nur über Tools, die wir im Alltag wirklich einsetzen. Fragen zum Artikel? Schreib uns.