Podman verzichtet auf einen zentralen Hintergrunddienst, der sämtliche Logs aggregiert, Befehle ausführt oder Eventströme bündelt. Stattdessen wird alles direkt von den Containerprozessen und ihrem lokalen Supervisor (Conmon) abgeführt. Das Ergebnis ist ein Beobachtbarkeitsmodell, das näher am Kernel arbeitet und sich weit direkter anfühlt als das „Everything goes through the daemon“-Konzept von Docker.
Wer Systeme baut, die reproduzierbar laufen, die im Fehlerfall präzise analysiert werden müssen und deren Lifecycle klar nachvollziehbar ist, profitiert davon: Logs, Exec-Aufrufe und Events sind bei Podman keine indirekten API-Operationen, sondern integrale Bestandteile der Prozesslandschaft.
Containerlogs entstehen bei Podman dort, wo sie entstehen müssen – im Prozess selbst. Conmon leitet Standard-Output und Standard-Error in eine Logdatei um. Keine Blackbox, keine Filterung, keine Transformation.
stdout/stderr des Containerprozesses Jeder Zeilenumbruch eines Programms landet direkt in der Logdatei.
Conmon-Metadaten Conmon schreibt Header, Zeitstempel und Ereignisse wie Exit-Codes in dieselbe Logstruktur.
Die Standardlog-Datei liegt typischerweise hier:
/run/containers/storage/<container-id>/<container-id>-json.log
oder unter:
~/.local/share/containers/storage/
je nach Rootless/Rootful-Setup.
podman logs myappDie CLI liest die Datei und gibt sie unverändert aus. Das Format basiert auf dem Docker-JSON-Logformat, um Tools kompatibel zu halten.
Podman unterstützt klassische Tail/Follow-Semantik:
podman logs -f --tail 200 myappDabei wird nicht über einen Daemon gestreamt, sondern per kontinuierlicher Dateiüberwachung. Das ist robuster: Stürzt die CLI ab, läuft der Container weiter. Startet man die CLI erneut, kann man wieder in dieselbe Datei schauen.
log_opts konfigurieren.podman exec ermöglicht es, Kommandos in einen laufenden
Container einzuschleusen. Dabei geschieht nichts Magisches: Podman baut
eine neue Prozesshierarchie im selben Namespace auf.
Exec verwendet setns()-Syscalls, um in
die Namespaces des laufenden Containers zu wechseln – insbesondere:
Anschließend wird das gewünschte Kommando mittels
fork()/execve() gestartet.
Die Grundstruktur:

Dadurch gehört der Exec-Prozess logisch zum Container, obwohl er physisch vom Host aus gestartet wurde.
podman exec -it myapp shoder:
podman exec myapp kill -USR1 1Exec ist ein Werkzeug zum Diagnostizieren und Steuern – aber kein Subsystem. Besonders wichtig: Exec wird nicht über einen Daemon vermittelt; wenn die CLI beendet wird, bleibt der Container unberührt.
PID 1 bleibt PID 1 Verhalten wie Signalweiterleitung oder Shutdown-Hooks hängen von PID 1 ab. Exec ändert daran nichts.
Resource-Limits gelten weiterhin Ein Exec-Prozess unterliegt denselben Cgroup-Regeln wie der Container.
Ohne Daemon braucht Podman trotzdem eine Möglichkeit, Containerzustände zu signalisieren. Dies geschieht über ein Eventsystem, das Conmon und die Engine gemeinsam erzeugen. Alle relevanten Ereignisse werden lokal persistiert und sind abrufbar.
Typische Events:
createinitstartstopkillcleanupattachexecexec-diehealth_status: healthy/unhealthyDiese Ereignisse reflektieren exakt, was im Prozessmodell geschieht.
podman eventsoder mit Filterung:
podman events --filter event=start
podman events --filter container=myappMan kann Events streamen oder vergangene Einträge abrufen. Der Mechanismus eignet sich hervorragend zum Debuggen von Zustandswechseln und für automatisierte Workflows.
Podman schreibt Eventinformationen in eine einfache JSON-basierte Eventlog-Datei. Tools können darauf aufsetzen, ohne einen Daemon anzuzapfen.
Ein abstrahiertes Beispiel:
{
"Name": "start",
"ID": "abcd1234...",
"Image": "alpine:3.19",
"Time": 1710000000
}Events sind damit das Äquivalent eines (dezentralen) Audit-Logs der Containerlaufzeit.
Das Dreieck aus Logs, Exec und Events bildet den operativen Werkzeugkasten für Containerdiagnose – ohne zusätzliche Schichten, ohne Hintergrunddienste, ohne Abstraktionstricks.
Alles basiert auf nativen Linux-Mechanismen – direkt, nachvollziehbar und frei von versteckten Kontrollinstanzen.