Serie: Podman-Bausteine – Wie funktioniert die Restart-Policy? Oder: Podman hat keinen Daemon (Teil 3)

  indibart   Lesezeit: 4 Minuten Auf Mastodon ansehen

Der Artikel erklärt, wie Podman Container ohne Daemon überwacht und neu startet und beschreibt drei typische Stolpersteine bei der rootless/rootful-Konfiguration.

serie: podman-bausteine – wie funktioniert die restart-policy? oder: podman hat keinen daemon (teil 3)

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

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.service ist 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.service unterschiedlich 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

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.

Tags

Podman, conmon, Restart-Policy, Daemonless, Rootless

Es wurden noch keine Kommentare verfasst, sei der erste!