Serie: Podman-Bausteine – Podman CLI (Teil 2)

  indibart   Lesezeit: 9 Minuten Auf Mastodon ansehen

Der Artikel zeigt die grundlegenden Podman-CLI-Befehle und führt in den Unterschied zwischen rootless und rootful Containern ein.

serie: podman-bausteine – podman cli (teil 2)

Eine Tutorialreihe zum Einsatz von Podman: Anwendung, Vorteile und Funktionsweise.

Inhaltsverzeichnis

  1. Teil: Einleitung und Installation
  2. Teil: Podman CLI
  3. Teil: Wie funktioniert die Restart-Policy? Oder: Podman hat keinen Daemon
  4. Teil: Quadlets
  5. Teil: Updates
  6. Teil: Healthchecks
  7. Teil: Ports publishing - rootful & rootless
  8. Teil: Volumes & Mounts
  9. Teil: Netzwerk: Kommunikation zwischen Containern
  10. Teil: Capabilities

Einleitung

In den ersten Artikeln möchte ich erklären, wie du Container mittels Podman laufen lassen kannst. Dabei werden wir beispielhaft IT Tools zum Laufen bringen. Es handelt sich dabei um eine kleine Applikation, die einige nützliche Tools für Sysadmins bietet. Neben seiner Nützlichkeit ist es auch ein guter Startpunkt für das Podman-Thema, gerade weil es so simpel ist.

Es gibt verschiedene Möglichkeiten Container mit Podman laufen zu lassen. In diesem Artikel beschäftigen wir uns mit dem CLI-Tool von Podman. In späteren Artikeln werden wir uns mit Compose und Quadlet beschäftigen.

Podman CLI

Werfen wir einen ersten Blick in die Installationsanleitung von IT-Tools. Diese zeigt als Erstes das docker run Kommando:

docker run --pull always --restart unless-stopped -p 8080:8080 sharevb/it-tools:latest

Podman wurde so erstellt, dass du nur den Alias alias docker='podman' zu erstellen brauchst, um die docker-Befehle direkt ausführen zu können. Mir hat das jedoch nie zugesagt. Es gibt nämlich immer wieder kleine Differenzen zwischen Docker und Podman, wo diese Idee ins Wanken gerät. So auch hier: Docker geht davon aus, dass immer die eigene Plattform docker.io gemeint ist, wenn keine URL vor dem Image steht. Das ist der Vorteil davon, zuerst zu sein. Podman macht das nicht, zumindest nicht out of the box. sharevb/it-tools:latest musst du also durch docker.io/sharevb/it-tools:latest ersetzen. Und wenn du das schon machst, weshalb nicht gerade docker durch podman ersetzen?

Das gäbe dann den folgenden Befehl:

podman run --pull always --restart unless-stopped -p 8080:8080 docker.io/sharevb/it-tools:latest

Betrachten wir den Befehl

Der Befehl podman run könnte als Kurzform von (podman pull, falls nötig) + podman create + podman start [+ podman attach] angesehen werden. Im Detail läuft podman run so ab:

  1. Falls das angegebene Image noch nicht lokal vorhanden ist, wird es automatisch heruntergeladen (das entspricht podman pull). Ist das Image aber schon lokal, entfällt dieser Schritt komplett.
  2. Es wird ein neuer Container aus dem Image angelegt, mit allen Optionen (das entspricht podman create).
  3. Der neu erstellte Container wird gestartet (das entspricht podman start).
  4. Ohne -d hängt sich podman run an den Container und zeigt dessen Ausgabe live an (ähnlich podman attach bzw. podman logs -f).

--pull always sorgt dafür, dass das Image jedes Mal von Neuem heruntergeladen wird, unabhängig davon, ob es schon lokal vorhanden ist. So wird sichergestellt, dass du immer die neueste Version nutzt.

Die Restart-Richtlinie bestimmt, ob ein Container neu gestartet werden soll, wenn er beendet wurde. --restart unless-stopped-Container sollen beim Beenden neu gestartet werden, es sei denn, der Container wurde vom Benutzer explizit gestoppt. Mehr dazu im Teil 3: Wie funktioniert die Restart-Policy? Oder: Podman hat keinen Daemon.

-p HostPort:ContainerPort oder auch --publish=HostPort:ContainerPort verbindet einen Port auf dem Host mit einem Container-internen Port. Über diesen Host-Port ist der Container nun erreichbar. Hier ist der Host-Port 8080 mit dem internen Port 8080 verbunden.

Wenn du also den oben genannten Befehl ausführst, sollten zwei Dinge passieren:

  1. Der Start von IT-Tools sollte im Terminal sichtbar sein. Solange du nicht abbrichst (CTRL-C), wird dein Terminalfenster durch den Container blockiert sein.
  2. Du solltest IT-Tools über erreichen können.

Den Container im Hintergrund laufen lassen

Wenn du dein Terminal trotz laufenden IT-Tools nutzen möchtest, musst du dem Befehl die Option -d oder --detach hinzufügen.

podman run --pull always --restart unless-stopped -p 8080:8080 -d docker.io/sharevb/it-tools:latest

Statt der ganzen Log-Ausgaben kriegst du so lediglich die Container-ID angezeigt. In meinem Fall ist das 32518ad8d7d62ac3ea5349766c666c08c1ca8f26388e26ca2fe587dd8ca842ff. Mit dieser lässt sich jeder Container eindeutig bestimmen.

Container auflisten

Wenn du nun dein Terminal beendest, siehst du nicht mehr, welche Container eigentlich laufen. Dafür gibt es den Befehl podman ps. Er lehnt sich an das Standard-Tool ps an und zeigt dir an, welche Podman Container gerade laufen.

podman ps
CONTAINER ID  IMAGE                              COMMAND               CREATED        STATUS        PORTS                   NAMES
32518ad8d7d6  docker.io/sharevb/it-tools:latest  nginx -g daemon o...  3 seconds ago  Up 3 seconds  0.0.0.0:8080->8080/tcp  vibrant_ellis

Hier siehst du nochmals die Kurzfassung der Container-ID. In meinem Fall lautet sie 32518ad8d7d6. Mit dieser kannst du deinen Container direkt ansprechen, doch angenehm ist das nicht. Besser (menschlicher) ist es, mit dem Container-Namen zu arbeiten. In meinem Fall vibrant_ellis. Dieser Name ist halb zufällig und hat daher keinen Zusammenhang zu deinem Container. Er lässt sich aber auch selbst festlegen. So kann etwas gewählt werden, das für dich mehr Sinn macht, wenn du mit dem Container zu tun hast. Das machen wir mit der Option --name gefolgt vom Namen, den wir setzen wollen.

Container stoppen, starten, neu starten, löschen

Um Container wieder zu beenden, nutzt du den Befehl podman stop, gefolgt von der Container-ID oder dem Container-Namen: podman stop ittools.

Der Container ist dann zwar gestoppt, existiert aber noch. Alle Container – auch die gestoppten – kannst du dir mittels podman ps -a anzeigen lassen.

podman stop vibrant_ellis
podman ps -a
CONTAINER ID  IMAGE                                      COMMAND               CREATED         STATUS                     PORTS                   NAMES
32518ad8d7d6  docker.io/sharevb/it-tools:latest          nginx -g daemon o...  10 minutes ago  Exited (0) 13 seconds ago  0.0.0.0:8080->8080/tcp  vibrant_ellis

Einen gestoppten Container kannst du wieder mittels podman start gefolgt von der Container-ID oder dem Container-Namen starten: podman start vibrant_ellis.

Um einen laufenden Container neu zu starten, nutzt du den Befehl podman restart gefolgt von der Container-ID oder dem Container-Namen: podman restart vibrant_ellis.

Um einen gestoppten Container zu löschen, nutzt du den Befehl podman rm gefolgt von der Container-ID oder dem Container-Namen, also podman rm vibrant_ellis.

Ich nehme an, du erkennst das Muster. Hier nochmals zusammengefasst:

podman start vibrant_ellis
podman restart vibrant_ellis
podman stop vibrant_ellis
podman rm vibrant_ellis

Gelöschte Container neu erstellen

Wenn du einen Container gelöscht hast, kannst du ihn nicht mehr starten. Dann musst du erst wieder einen Container erstellen. Nutze dafür podman create mit den gleichen angehängten Optionen wie zuvor beim podman run-Befehl:

podman create --pull always --restart unless-stopped -p 8080:8080 docker.io/sharevb/it-tools:latest

Wiederum kriegst du die ID, mit der du den Container starten kannst:

podman start 539ec26c5

Oder du nutzt einfach wieder podman run, der beides in einem macht.

Container-Logs anzeigen

Bei Problemen möchtest du die Logs des Containers checken. Mit dem Befehl podman logs, gefolgt von der Container-ID oder dem Container-Namen, kriegst du Logs bis zum jetzigen Zeitpunkt. In unserem Fall also podman logs ittools. Wenn du außerdem möchtest, dass sich die Logs aktualisieren, brauchst du noch die Option -f oder --follow: podman logs -f ittools.

podman logs 539ec26c5

podman logs -f 539ec26c5

Container-ID und Container-Name

Noch ein Wort zur Container-ID und dem Container-Namen. Oft wird davon abgeraten, einen Namen zu setzen, da dieser einzigartig sein muss. Wenn du mehrere Container eines Images erzeugen willst, funktioniert die Namensgebung natürlich nicht. Wenn du die --name-Option weglässt, setzt Podman einen halbzufälligen Namen. Wie oben kannst du dir mittels podman ps den Namen anzeigen lassen. Dann kannst du den Namen auch wieder in den Befehlen einsetzen.

Du kannst aber auch immer die Container-ID nutzen. Dabei brauchst du nicht die ganze ID, sondern nur so viel, dass Podman eindeutig weiß, welchen Container du meinst.

Weshalb also würdest du vielleicht trotz Best Practice einen Container-Namen setzen? Weil du evtl. nur ein IT Tools bei dir laufen hast. Dann kannst du problemlos einen Namen setzen. Das hat dann den Vorteil, dass du deine Container sofort anhand ihrer Namen erkennst und auch managen kannst.

Rootless Container

Vielleicht ist dir schon aufgefallen, dass ich kein sudo vor die Podman-Befehle gesetzt habe. Das liegt daran, dass der Container mit deinen eigenen Nutzerrechten läuft, also rootless.

Wir werden uns laufend mit den Konsequenzen davon beschäftigen. Im Moment musst du nur wissen, dass der Container unter deinem Nutzer läuft.

Wenn du den Container rootful laufen lassen möchtest, musst du die Befehle mit Root-Rechten ausführen:

# Im Vordergrund:
sudo podman run --pull always --restart unless-stopped -p 8080:8080 docker.io/sharevb/it-tools:latest

# Im Hintergrund:
sudo podman run --pull always --restart unless-stopped -p 8080:8080 -d docker.io/sharevb/it-tools:latest

Auch alle anderen Podman-Befehle, die sich um die rootful Container drehen, musst du mit Root-Rechten ausführen. Beispielsweise um die rootful Container aufzulisten:

sudo podman ps

Experimentieren

Ich lade dich ein, zu experimentieren. So lernst du schnell, wie Podman funktioniert. Überlege dir auch, weshalb das so ist.

Was passiert, wenn du...

  • --pull always weglässt?
  • -p 8080:8080 weglässt?
  • den Host-Port änderst, zum Beispiel -p 9999:8080?
  • den Container-Port änderst, zum Beispiel -p 8080:9999?

Fazit und Ausblick

Du kennst jetzt die wichtigsten Podman-CLI-Befehle, um Container zu erstellen, zu starten, aufzulisten, zu stoppen, neu zu starten, zu löschen und ihre Logs anzuschauen – egal ob rootless oder rootful. Damit hast du das Handwerkszeug, um im Alltag mit einzelnen Containern zu arbeiten.

Ein Detail haben wir bewusst ausgeklammert: die Restart-Policy (--restart unless-stopped). Weil Podman im Gegensatz zu Docker keinen Daemon hat, funktioniert automatisches Neustarten anders – genau darum geht es im nächsten Teil.

TL;DR

Starte IT-Tools:

# ROOTLESS:
# Im Vordergrund:
podman run --pull always --restart unless-stopped -p 8080:8080 docker.io/sharevb/it-tools:latest

# Im Hintergrund:
podman run --pull always --restart unless-stopped -p 8080:8080 -d docker.io/sharevb/it-tools:latest

# ROOTFUL:
# Im Vordergrund:
sudo podman run --pull always --restart unless-stopped -p 8080:8080 docker.io/sharevb/it-tools:latest

# Im Hintergrund:
sudo podman run --pull always --restart unless-stopped -p 8080:8080 -d docker.io/sharevb/it-tools:latest

Liste laufende Container auf:

# ROOTLESS:
podman ps

# ROOTFUL:
sudo podman ps

Container-Logs anzeigen:

podman logs 
podman logs -f 

Container starten, neu starten, stoppen und löschen:

podman start 
podman restart 
podman stop 
podman rm 

Quellen und Dokumentation

Quellen:
- «podman-create — Podman documentation». Zugriff am 6. August 2026. https://docs.podman.io/en/stable/markdown/podman-create.1.html.
- «podman-logs — Podman documentation». Zugriff am 6. August 2026. https://docs.podman.io/en/stable/markdown/podman-logs.1.html.
- «podman-restart — Podman documentation». Zugriff am 6. August 2026. https://docs.podman.io/en/stable/markdown/podman-restart.1.html.
- «podman-run — Podman documentation». Zugriff am 4. August 2026. https://docs.podman.io/en/latest/markdown/podman-run.1.html.
- «podman-start — Podman documentation». Zugriff am 6. August 2026. https://docs.podman.io/en/stable/markdown/podman-start.1.html.
- «podman-stop — Podman documentation». Zugriff am 6. August 2026. https://docs.podman.io/en/stable/markdown/podman-stop.1.html.

Tags

Podman, Container, CLI, Rootless, podman run

Es wurden noch keine Kommentare verfasst, sei der erste!