Kurs
Angenommen, du hast eine Datei namens „ docker-compose.yml “, die seit Monaten funktioniert. Aber jetzt sollst du Podman anstelle von Docker verwenden und bist dir nicht sicher, ob du die Datei bearbeiten oder ganz von vorne anfangen musst. Deine lokale Entwicklungsumgebung hängt von dieser Compose-Datei ab, und du hast echt keine Zeit, dein gesamtes Setup neu aufzubauen.
Die gute Nachricht ist, dass du mit Podman Compose vorhandene Compose-Dateien mit Podman statt mit Docker ausführen kannst. Es ist eine Python-basierte Kompatibilitätsschicht, die deine Compose-Definitionen in Podman-Befehle übersetzt, sodass du den dir vertrauten Multi-Container-Workflow weiter nutzen kannst.
In diesem Artikel zeige ich dir, was Podman Compose ist, wie du es installierst und wie du deine erste Multi-Container-Anwendung damit ausführst. Wenn dir einige derin diesem Artikel vorgestellten Konzepte der „ “ neu sind, melde dich für unseren Kurs an. Kurs „Containerisierung und Virtualisierungskonzepte”, um die Grundlagen zu verstehen.
Was ist Podman Compose?
Podman Compose ist ein Python-basiertes Tool, das deine „ docker-compose.yml “-Dateien liest und in Podman-Befehle übersetzt.
Du schreibst immer noch ein Standard-Docker-Compose-Skript. Docker Compose mit Diensten, Netzwerken und Volumes. Podman Compose checkt diese Datei und führt die entsprechenden Befehle „ podman “ aus, um deine Container zu starten. Es übernimmt die Übersetzung für dich, sodass du die Compose-Syntax nicht manuell in Podman-CLI-Befehle umwandeln musst.
Es ist wichtig zu wissen, dass Podman Compose kein direkter Ersatz für Docker Compose ist.
Es ist eine Kompatibilitätsschicht. Einige Funktionen von Docker Compose funktionieren sofort, andere müssen angepasst werden und ein paar funktionieren überhaupt nicht. Das Tool ist auf Kompatibilität ausgelegt, aber es kopiert nicht jedes einzelne Verhalten von Docker Compose.
Hier ist noch eine andere Sichtweise: Docker Compose redet direkt mit dem Docker-Daemon. Podman Compose redet mit der Podman-Befehlszeilenschnittstelle, die dann Container ohne einen Daemon verwaltet. Das Endergebnis sieht ähnlich aus, aber die Mechanismen dahinter sind anders.
Das heißt, du kannst die meisten deiner vorhandenen Compose-Dateien wiederverwenden, musst aber wissen, wo die Unterschiede liegen.
Warum Podman Compose nutzen?
Mit Podman Compose kannst du Anwendungen mit mehreren Containern ausführen, ohne Docker installieren zu müssen.
Im Vergleich zu Docker kriegst du standardmäßig rootless Container. Podman lässt Container laufen, ohne dass Root-Rechte nötig sind. Einfach gesagt: Es ist weniger riskant, wenn ein Container kaputt geht. Docker braucht den Daemon als Root, auch wenn du rootless Container drauf laufen hast.
Deshalb passt Podman Compose besser zu Umgebungen, in denen Sicherheit wichtig ist. Wenn du auf gesperrten Linux-Servern oder in Umgebungen arbeitest, in denen das Ausführen eines Daemons auf Root-Ebene nicht erlaubt ist, bietet dir Podman Compose den Multi-Container-Workflow, den du brauchst.
Es ist auch nützlich für die Entwicklung und das Testen. Du kannst lokale Umgebungen einrichten, Container-Konfigurationen testen und deine Compose-Dateien überprüfen, ohne Docker installiert zu haben. Es ist super für einfache Einsätze, wo du keine komplette Orchestrierung brauchst.
Aber man sollte wissen, dass Podman Compose nicht für jede Situation perfekt ist.
Wenn du Produktions-Workloads in großem Maßstab ausführst, solltest du lieber Kubernetes oder Docker Swarm nutzen. Podman Compose läuft auf macOS und Windows nicht so gut wie auf Linux, also wird deine plattformübergreifende Entwicklung nicht ganz so reibungslos laufen. Und wenn dein Team schon mit benutzerdefinierten Plugins und Tools in das Docker-Ökosystem investiert hat, bedeutet der Wechsel zu Podman Compose, dass Teile dieses Workflows neu aufgebaut werden müssen.
Also, wenn du rootless Container, sicherheitsorientierte Umgebungen oder eine Docker-freie Entwicklungsumgebung brauchst, dann nimm Podman Compose.
Podman Compose installieren
Podman Compose läuft am besten unter Linux, wo Podman nativ läuft.
Du kannst es auf macOS und Windows installieren, musst Podman aber erst mal in einer virtuellen Maschine laufen lassen. Das macht die Sache komplizierter und läuft nicht so flüssig wie unter Linux. Wenn du macOS oder Windows benutzt, musst du mit zusätzlichen Einrichtungsschritten und möglichen Netzwerkproblemen rechnen.
Installation unter Linux
Am einfachsten installierst du Podman Compose über pip.
pip install podman-compose

Podman Compose auf Linux installieren
Damit installierst du die neueste Version von PyPI. Du musst dir keine Gedanken über die Verwaltung der Python-Version machen – wenn du Python 3 installiert hast, kannst du loslegen.
Einige Linux-Distributionen haben Podman Compose auch in ihren Repositories. Auf Fedora, RHEL und CentOS kannst du Folgendes verwenden:
sudo dnf install podman-compose
Auf Ubuntu- und Debian-basierten Systemen machst du Folgendes:
sudo apt install podman-compose
Die Versionen der Paketmanager hinken oft hinter PyPI hinterher, sodass du die neuesten Funktionen möglicherweise nicht sofort nutzen kannst.
Installation auf macOS und Windows
Unter macOS und Windows musst du zuerst Podman Desktop einrichten oder podman machine nutzen, um eine Linux-VM zu erstellen. Sobald das läuft, installierst du Podman Compose mit dem Befehl „ pip “ in dieser Umgebung.
Also, der erste Schritt ist, sich mit dem Gerät zu verbinden:
podman machine ssh

SSH-Verbindung zur Podman-VM
Da die VM auf Fedora basiert, kannst du diesen Befehl ausführen, um Podman Compose zu installieren:
sudo dnf install podman-compose

Podman Compose installieren
Durch diesen zweistufigen Prozess fährst du Podman Compose nicht direkt auf deinem Host-Betriebssystem, sondern in der Linux-VM, die Podman erstellt.
Überprüfen der Installation
Mach diesen Befehl, um zu checken, ob Podman Compose richtig installiert wurde:
podman-compose --version

Überprüfe die Installation von Podman Compose
Du solltest die Versionsnummer auf dem Terminal sehen. Wenn du die Fehlermeldung „Befehl nicht gefunden“ bekommst, check mal, ob dein Python - bin -Verzeichnis in deinem PATH steht.
Das ist alles, was du brauchst, um Podman Compose zu nutzen.
Ausführen einer Compose-Datei mit Podman Compose
Du hast Podman Compose installiert – jetzt zeig ich dir, wie du eine echte Anwendung ausführst.
Eine vorhandene Docker Compose-Datei verwenden
Podman Compose liest Standard- docker-compose.yml -Dateien. Du musst nichts umbenennen oder das Format ändern.
Hier ist eine einfache FastAPI-App, die in einer Compose-Datei definiert ist:
services:
web:
image: python:3.14-slim
container_name: fastapi-app
working_dir: /src
volumes:
- ./src:/src
ports:
- "8000:8000"
command: bash -c "pip install fastapi uvicorn && uvicorn main:app --host 0.0.0.0 --port 8000"
Mit dem Anwendungscode in „ src/main.py “:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello from FastAPI"}
@app.get("/health")
def health_check():
return {"status": "healthy"}
Die meisten Funktionen von Docker Compose funktionieren mit Podman Compose sofort. Das umfasst:
- Image-Abruf und Container-Erstellung
- Portzuordnungen
- Volume-Mounts (sowohl benannte Volumes als auch Bind-Mounts)
- Umgebungsvariablen
- Grundlegende Vernetzung zwischen Diensten
Aber ein paar Sachen müssen noch angepasst werden. Wenn deine Compose-Datei Docker-spezifische Plugins, benutzerdefinierte Netzwerktreiber oder erweiterte Build-Argumente verwendet, musst du diese Abschnitte wahrscheinlich anpassen.
Podman Compose geht auch anders mit Netzwerken um – Dienste finden sich nicht automatisch über den Dienstnamen, wie es bei Docker Compose der Fall ist.
Grundlegende Podman Compose-Befehle
Jetzt kannst du deine Dienste mit diesem Befehl starten:
podman-compose up
Das holt Bilder, erstellt Container und startet alles, was in deiner Compose-Datei steht. Füge „ -d “ hinzu, um im getrennten Modus zu laufen, wenn du nicht willst, dass Protokolle auf dein Terminal gestreamt werden.

Podman-Ausgabe
Du kannst die App jetzt auf Port 8000 auf deinem Rechner (oder auf einer Remote-Ubuntu-Instanz, wie ich sie benutze) öffnen. Du wirst Folgendes sehen:

FastAPI-Anwendung läuft über Podman
Um laufende Dienste zu stoppen, machst du Folgendes:
podman-compose down
Das stoppt und entfernt Container. Die Volumes bleiben bestehen, es sei denn, du fügst „ --volumes “ hinzu, um sie ebenfalls zu entfernen.
Um deine Dienstprotokolle zu checken, machst du diesen Befehl:
podman-compose logs
Füge „ -f “ hinzu, um die Protokolle in Echtzeit zu verfolgen, oder gib einen Servicenamen an, um nur die Protokolle dieses Containers zu sehen.
Um alles zu bereinigen, einschließlich Container, Netzwerke und Volumes, machst du Folgendes:
podman-compose down --volumes
Die Befehle sind wie die Syntax von Docker Compose, also wenn du dich schon mit docker-compose auskennst, wirst du dich sofort zurechtfinden.
Podman Compose vs. Docker Compose und andere
Podman Compose und Docker Compose haben das gleiche Ziel, funktionieren aber im Hintergrund unterschiedlich. Ich erkläre dir, wie das geht.
Rootless-Ausführung
Docker Compose braucht den Docker-Daemon, der als Root läuft. Auch wenn du rootless-Container einrichtest, braucht der Daemon selbst erweiterte Rechte. Podman Compose läuft komplett ohne Root-Zugriff standardmäßig. Deine Container starten als dein Benutzer, nicht als Systemdienst, was die Angriffsmöglichkeiten einschränkt und Podman Compose in Umgebungen mit mehreren Benutzern sicherer macht.
Netzwerkverhalten
Docker Compose richtet ein Standard-Bridge-Netzwerk für deine Dienste ein. Container können sich automatisch über den Servicenamen erreichen.
Podman Compose nutzt stattdessenpodbasierte Netzwerk. Alle Container in deiner Compose-Datei werden in einem einzigen Podman-Pod zusammengefasst und nutzen denselben Netzwerk-Namespace. Das heißt, Container kommunizieren über „ localhost “ statt über Servicenamen, was Docker-Nutzer manchmal überrascht.
Wenn deine App eine Datenbank unter db:5432 erreichen soll, musst du das bei der Ausführung mit Podman Compose in localhost:5432 ändern.
Pod-basierte Gruppierung
Docker Compose kümmert sich um einzelne Container. Podman Compose erstellt einenPod namens „ “. Das ist so eine Art Kubernetes-Gruppierung, wo Container das Netzwerk und den Speicher teilen können. Dieses Pod-Modell passt Podman Compose an die Kubernetes-Muster an, was die spätere Migration von Workloads vereinfacht, wenn du eine Orchestrierung brauchst.
systemd-Integration
Podman lässt sich mit systemd verbinden, um Container als Systemdienste zu verwalten. Du kannst systemd-Unit-Dateien aus laufenden Containern erstellen und sie wie jeden anderen Linux-Dienst verwalten. Docker hat keine native systemd-Integration auf Containerebene.
Andere Optionen
Wenn Podman Compose nicht das Richtige für dich ist, gibt's noch diese Alternativen:
- Mit systemd kannst du Podman direkt nutzen Damit kannst du Container als Dienste verwalten, ohne dass du Compose-Dateien brauchst.
- Kubernetes bietet dir volle Orchestrierung, wenn du Produktions-Workloads in großem Maßstab ausführst, ist aber viel schwerfälliger als Tools im Compose-Stil.
Podman Compose ist irgendwo zwischen einfachen Containerbefehlen und vollständiger Orchestrierung angesiedelt. Du bekommst damit Multi-Container-Workflows, ohne dass du den Docker-Daemon brauchst.
Netzwerke und Volumes in Podman Compose (Was ist anders?)
Docker-Nutzer, die zu Podman Compose wechseln, beschweren sich meistens über zwei Sachen: Netzwerk und Volumes. In diesem Abschnitt werde ich die Unterschiede durchgehen.
Kommunikation zwischen Diensten
In Docker Compose verbindest du dich mit anderen Diensten über deren Dienstnamen. Wenn du einen Webdienst und einen Datenbankdienst namens db hast, verbindet sich deine App mit db:5432.
Podman Compose packt alle Dienste in einen einzigen Pod. Container im selben Pod teilen sich einen Netzwerk-Namespace, was bedeutet, dass sie alle localhost verwenden. Deine Datenbankverbindungszeichenfolge ändert sich von db:5432 zu localhost:5432.
Das überrascht die Leute. Deine App startet, versucht, eine Verbindung zu db:5432 herzustellen, und schlägt fehl, weil dieser Hostname nicht aufgelöst werden kann. Du musst deine Verbindungszeichenfolgen oder Umgebungsvariablen anpassen, um stattdessen localhost zu nutzen.
Standardnetzwerke
Docker Compose baut ein Bridge-Netzwerk für deine Dienste auf. Jeder Container kriegt seine eigene IP-Adresse in diesem Netzwerk, und der DNS-Resolver von Docker kümmert sich um die Suche nach Servicenamen.
Podman Compose erstellt standardmäßig keine separaten Netzwerke. Beim Pod-Modell teilen sich Container die Netzwerkressourcen auf einer niedrigeren Ebene. Wenn du in deiner Compose-Datei eigene Netzwerke festlegst, versucht Podman Compose, diese zu erstellen, aber das Verhalten könnte nicht ganz mit Docker übereinstimmen.
Verhalten beim Mounten von Volumes und Bindings
Volumes und Bind-Mounts funktionieren bei Docker Compose und Podman Compose meistens gleich. Du legst sie in deiner Compose-Datei fest, und Podman erstellt sie.
Aber es gibt einen Haken bei den Berechtigungen.
Podman läuft standardmäßig ohne Root-Rechte, sodass sich Dateibesitz und Berechtigungen anders verhalten können. Ein Bind-Mount, der in Docker super läuft, kann in Podman zu Berechtigungsfehlern führen, weil der Container-Benutzer nicht mit der UID deines Host-Benutzers übereinstimmt.
Du wirst auch sehen, dass die Lautstärkepositionen unterschiedlich sind. Docker speichert Volumes unter /var/lib/docker/volumes/, während Podman sie für rootless Container unter ~/.local/share/containers/storage/volumes/ ablegt.
Die Fehlerbehebungen sind einfach umzusetzen, wenn man weiß, was los ist. Also, pass einfach die Verbindungszeichenfolgen für das Netzwerk an und überprüfe die Dateiberechtigungen auf Probleme mit dem Datenträger.
Häufige Einschränkungen und Fallstricke
Podman Compose eignet sich gut für einfache Multi-Container-Setups, hat aber auch Einschränkungen, die du kennen solltest, bevor du dich dafür entscheidest.
Nicht unterstützte Funktionen von Compose
Nicht jede Funktion von Docker Compose ist in Podman Compose verfügbar. Build-Kontexte mit komplizierten Argumenten gehen oft schief oder machen was anderes als erwartet. Docker Compose Plugins und Erweiterungen funktionieren überhaupt nicht. Funktionen wie GPU-Passthrough, erweiterte Zustandsprüfungen und einige Netzwerkmodi funktionieren entweder nicht oder brauchen Workarounds.
Wenn deine Compose-Datei die Funktionen von docker-compose.yml Version 3.x intensiv nutzt, musst du mit ein paar Versuchen rechnen.
Netzwerkvorstellungen, die sich von Docker unterscheiden
Dienste kommunizieren nicht über ihren Namen, sondern über localhost. Das macht Apps kaputt, die Servicenamen in Verbindungszeichenfolgen fest einprogrammieren.
Benutzerdefinierte Bridge-Netzwerke funktionieren nicht so wie Docker. Die DNS-Auflösung läuft wegen dem Pod-Modell anders ab.
Rechne damit, dass du etwas Zeit damit verbringen wirst, Konfigurationen und Umgebungsvariablen anzupassen, damit sie zum Netzwerkmodell von Podman passen, aber das musst du nur einmal machen.
Plattformbeschränkungen unter macOS/Windows
Podman Compose läuft am besten unter Linux. Unter macOS und Windows läuft alles in einer Linux-VM, was die Sache ziemlich kompliziert macht. Die Dateisynchronisierung zwischen deinem Host und der VM kann langsamer sein. Die Vernetzung zwischen deinem Host und den Containern braucht noch ein paar zusätzliche Einstellungen.
Wenn dein Team für die Entwicklung macOS- oder Windows-Rechner nutzt, ist Docker Compose meistens die einfachere Wahl.
Reife der Tools und Lücken im Ökosystem
Podman Compose ist neuer als Docker Compose. Die Community ist kleiner, also muss man mehr suchen, um Antworten auf bestimmte Probleme zu finden. Tools und Integrationen von Drittanbietern sind zuerst für Docker gemacht, dann für Podman (wenn überhaupt). Die IDE-Unterstützung und die GUI-Tools hinken dem Docker-Ökosystem hinterher.
Du wirst nicht so viele Antworten auf Stack Overflow oder GitHub-Issues zu Problemen mit Podman Compose finden.
Diese Einschränkungen machen Podman Compose nicht unbrauchbar, aber man sollte sie vor der Verwendung bedenken. Docker Compose-Nutzer haben mit diesen Problemen überhaupt nichts zu tun.
Tipps für die Verwendung von Podman Compose
Hier erfährst du, wie du die häufigsten Probleme mit Podman Compose vermeiden kannst.
-
Fang mit einfachen Compose-Dateien an. Migriere nicht zuerst deine komplexeste Docker-Konfiguration. Fang mit einer Anwendung für einen einzelnen Dienst an, schau, ob sie funktioniert, und füge dann noch ein paar weitere hinzu. So kannst du Probleme gleich erkennen, wenn sie auftauchen.
-
Probier das rootless networking schon früh aus. Starte eine Multi-Service-App und schau nach, ob die Container über
localhostmiteinander reden können. Ändere deine Verbindungszeichenfolgen von Servicenamen zulocalhost. Wenn das Netzwerk nicht so läuft, wie du es dir vorstellst, merkst du das sofort. -
Sei klar mit Volumen und Ports. Verlass dich nicht auf die Standardeinstellungen. Gib die kompletten Pfade für Bind-Mounts an. Portzuordnungen festlegen. Leg die Dateiberechtigungen explizit fest, wenn du Host-Verzeichnisse einbindest. Das rootless-Modell von Podman bedeutet, dass Annahmen, die in Docker funktioniert haben, hier möglicherweise nicht mehr zutreffen.
-
Podman Compose ist vor allem für die Entwicklung und leichte Produktion gedacht. Es kommt gut mit lokalen Entwicklungsumgebungen und kleinen Bereitstellungen klar. Für die Produktion in großem Maßstab brauchst du Kubernetes oder eine andere Orchestrierungsplattform. Podman Compose ist nicht für Hochverfügbarkeitscluster oder komplexe Service-Meshes gemacht.
Fazit
Podman Compose bietet dir eine praktische Möglichkeit, Multi-Container-Anwendungen mit Podman statt mit Docker auszuführen. Es liest deine vorhandenen Compose-Dateien und wandelt sie in Podman-Befehle um, sodass du keinen komplett neuen Arbeitsablauf lernen musst. Aber es ist kein perfekter Klon von Docker Compose. Das Netzwerk funktioniert anders, manche Funktionen werden nicht unterstützt, und du musst die Verbindungszeichenfolgen und Konfigurationen an das Pod-basierte Modell von Podman anpassen.
Zum Schluss empfehle ich dir, dich über die Unterschiede zwischen Docker und Podman zu informieren, um mehr über ihre jeweiligen Architekturansätze und ihre Kompatibilität zu erfahren.
Häufig gestellte Fragen zu Docker Compose
Was ist Podman Compose?
Podman Compose ist ein Python-basiertes Tool, das Docker Compose-Dateien liest und in Podman-Befehle übersetzt. Damit kannst du Multi-Container-Anwendungen mit Podman statt mit Docker ausführen und hast denselben Compose-Workflow, ohne dass du einen Daemon oder Root-Rechte brauchst.
Kann ich Docker Compose-Dateien mit Podman Compose verwenden?
Ja, Podman Compose liest Standard- docker-compose.yml -Dateien. Die meisten grundlegenden Funktionen von Docker Compose funktionieren sofort, aber du musst die Verbindungszeichenfolgen von Servicenamen auf localhost anpassen, weil Podman ein podbasiertes Netzwerkmodell hat.
Was ist der Hauptunterschied zwischen Podman Compose und Docker Compose?
Podman Compose läuft standardmäßig ohne Root-Rechte und braucht keinen Daemon, während Docker Compose den Docker-Daemon als Root laufen lassen muss. localhostPodman Compose nutzt auch podbasiertes Networking, bei dem Container sich die Hostnamen teilen, während Docker Compose jedem Dienst seinen eigenen Hostnamen gibt.
Warum klappt die Verbindung zu meinen Diensten nicht, wenn ich Podman Compose benutze?
Podman Compose packt alle Dienste in einen einzigen Pod, der sich einen Netzwerk-Namespace teilt, sodass Container über localhost statt über Dienstnamen kommunizieren. Du musst in deinen Anwendungskonfigurationen Verbindungszeichenfolgen wie db:5432 in localhost:5432 ändern.
Läuft Podman Compose auf macOS und Windows?
Ja, aber du musst Podman erst mal in einer Linux-VM mit Podman Desktop oder podman machine laufen lassen. Das macht die Sache komplizierter als bei Linux, wo Podman direkt läuft, und es kann zu langsamerer Dateisynchronisierung und Netzwerkproblemen kommen.



