Eine Tutorialreihe zum Einsatz von Podman: Anwendung, Vorteile und Funktionsweise.
Inhaltsverzeichnis
- Teil: Einleitung und Installation
- Teil: Podman CLI
- Teil: Wie funktioniert die Restart-Policy? Oder: Podman hat keinen Daemon
- Teil: Quadlets
- Teil: Updates
- Teil: Healthchecks
- Teil: Ports publishing - rootful & rootless
- Teil: Volumes & Mounts
- Teil: Netzwerk: Kommunikation zwischen Containern
- Teil: Capabilities
Einleitung
Im letzten Artikel haben wir IT Tools mit dem Podman CLI-Tool zum Laufen gebracht. Der genutzte Befehl beinhaltete die Option --restart unless-stopped. In diesem Artikel wollen wir uns vertieft damit auseinandersetzen, was diese Option genau macht, wie es funktioniert und was wir dabei beachten müssen.
Wie funktioniert die Restart-Policy? Oder: Podman hat keinen Daemon
Eines der wichtigsten Argumente für Podman gegenüber Docker ist, dass Podman keinen dauerhaft laufenden Daemon hat. Das ist ein grosses Sicherheits-Plus: Viele Aufgaben des Daemons verlangen, dass er mit Root-Rechten läuft. Nicht auszudenken, was alles passieren könnte, würde der Daemon kompromittiert werden.
Doch wie überwacht (1) und startet Podman einen Container neu (2), wenn es keinen Daemon gibt, der das alles tun kann? Wie startet Podman bei einem Neustart des Systems alle Container (3), wenn kein Daemon da ist, der sich den Status merken kann?
Kurz: Podman nutzt andere, spezialisierte Tools, um das zu tun.
Wie überwacht Podman einen Container?
Wenn Podman einen Container startet, startet er zusätzlich einen conmon-Prozess. Pro Container(!) läuft also zusätzlich ein conmon-Prozess.
conmon ist ein Container-Monitor, der alle Inhalte der Container-Streams in eine Log-Datei bzw. in systemd journal schreibt und beim Ende eines Containers den Exit-Zeitpunkt und -Code aufzeichnet. So wird sichergestellt, dass alle diese Infos auch nach Beenden des Containers noch zur Verfügung stehen.
Nach dem Aufbau des Containers inklusive des conmon-Prozesses, beendet sich podman. Was bleibt, ist der conmon-Prozess, der diesen Container überwacht.
Wie startet Podman einen Container neu?
Stirbt ein Container, meldet conmon das und stösst automatisch einen neuen, kurzlebigen podman-Prozess an. Dieser prüft die Restart-Policy und baut den Container bei Bedarf komplett neu auf. Dabei entsteht auch ein neuer conmon-Prozess für diesen neuen Lauf. Alles, was vom alten Container übriggeblieben ist, wird aufgeräumt.
Wie startet Podman nach dem Systemstart alle nötigen Container?
Kommt Docker zum Einsatz, startet docker.service bei einem Systemstart den Docker Daemon. Der wiederum checkt beim Hochfahren selbst seinen Container-Zustand und startet alle nötigen Container. Das Neustarten der Container ist Teil der Startroutine des Docker-Daemons.
Podman nutzt den systemd-Service podman-restart.service. Dieser führt lediglich den Befehl podman start --all --filter should-start-on-boot=true aus und beendet sich wieder. Es ist also wiederum ein Podman-Prozess, der alle nötigen Container zu Beginn startet. Alles ohne Daemon.
Achtung: Stolpersteine!
-
Erster Stolperstein:
podman-restart.serviceist seit Podman Version 5.4.1 standardmässig nicht aktiviert. Wenn du also willst, dass deine Podman-Container nach einem System-Neustart gestartet werden, musst du diesen zuerst aktivieren. -
Zweiter Stolperstein: systemd unterscheidet zwischen System-Services und User-Services. Je nachdem, ob du willst, dass die rootful oder rootless Container neu gestartet werden, musst du
podman-restart.serviceunterschiedlich aktivieren:# ROOTLESS: systemctl --user enable podman-restart.service # ROOTFUL: sudo systemctl enable podman-restart.service -
Dritter Stolperstein: Wenn du den rootless Pfad gehst, werden die Container nur gestartet, wenn sich der entsprechende User einloggt. Entsprechend werden die Container beim Logout beendet. Wenn du das anders haben willst, dann musst du zusätzlich lingering aktivieren:
loginctl enable-linger
Zusammengefasst hast du drei Szenarien:
Automatischer Start der rootless Container bei Login:
systemctl --user enable podman-restart.service
Automatischer Start der rootless Container bei System-Start:
systemctl --user enable podman-restart.service
loginctl enable-linger
Automatischer Start der rootful Container bei System-Start:
sudo systemctl enable podman-restart.service
Fazit und Ausblick
Du weisst jetzt, warum --restart unless-stopped bei Podman anders funktioniert als bei Docker: conmon überwacht deine Container, ein kurzlebiger podman-Prozess kümmert sich um den Neustart bei einem Absturz, und podman-restart.service sorgt (sofern aktiviert) für den Neustart nach einem Reboot. Die drei Stolpersteine – Standardeinstellung, rootless vs. rootful, Login/Logout – kennst du jetzt auch.
Im nächsten Teil lernst du Quadlets kennen – Podmans deklarative Art, Container zu betreiben. Damit fallen gleich mehrere der Stolpersteine, die wir hier besprochen haben, komplett weg.
TL;DR
Aktiviere den automatischen rootless Container-Start bei Login:
# Nur ROOTLESS:
systemctl --user enable podman-restart.service
Aktiviere den automatischen Container-Start bei System-Start:
# ROOTLESS:
systemctl --user enable podman-restart.service
loginctl enable-linger
# ROOTFUL:
sudo systemctl enable podman-restart.service
Quellen und Dokumentation
- Soteras, Gabriel Barceló. «Rootless Podman: Restart Rootless Containers on Boot». Medium, 26. April 2024. https://medium.com/@gabrielgbs/rootless-podman-restart-rootless-containers-on-boot-eab354eae487.
- Containers. containers/conmon. C. 10. August 2018, Released 1. August 2026. https://github.com/containers/conmon.
- «podman-run – Podman documentation». Zugegriffen 6. August 2026. https://docs.podman.io/en/stable/markdown/podman-run.1.html#restart-policy.
Quellen:
- Soteras, Gabriel Barceló. «Rootless Podman: Restart Rootless Containers on Boot». Medium, 26. April 2024. https://medium.com/@gabrielgbs/rootless-podman-restart-rootless-containers-on-boot-eab354eae487.
- Containers. containers/conmon. C. 10. August 2018, Released 1. August 2026. https://github.com/containers/conmon.
- «podman-run – Podman documentation». Zugegriffen 6. August 2026. https://docs.podman.io/en/stable/markdown/podman-run.1.html#restart-policy.
