Containerfehler folgen oft wiederkehrenden Mustern. Obwohl sie sich als individuelle Symptome äußern – ein Dienst startet nicht, ein Port ist blockiert, Daten gehen verloren –, basieren sie auf einigen wenigen archetypischen Ursachenketten. Diese Muster zu erkennen, reduziert Diagnosezeit erheblich. Podman macht das besonders transparent, da Container direkt als normale Hostprozesse laufen. Statt eines Daemons, der Probleme verdeckt, offenbaren Kernel, Namespaces und Storage-Subsystem unmittelbar, was schiefgeht. Dieses Kapitel beschreibt die Fehlertypen, die in der Praxis am häufigsten auftreten, und zeigt, wie sie identifiziert werden.
Dieses Fehlermuster ist so verbreitet wie vielseitig – und dennoch strukturiert analysierbar. Typische Ursachen:
Diagnose:
podman logs <ctr>podman inspect --format '{{.State.ExitCode}}' <ctr>podman inspect → Command/Entrypoint überprüfenjournalctl -k → Kernel-Fehler/Denied-MessagesEin typisches Muster:
Error: exec: "run.sh": stat run.sh: no such file or directory
oder im SELinux-Fall:
permission denied (13)
Die Technik: die Kette aus Entry-Point → Mount → Policy kontrollieren.
Dieser Klassiker ist fast immer auf wenigen Ursachen zurückzuführen:
127.0.0.1 statt
0.0.0.0-p)Diagnose:
podman port <ctr>
podman inspect | jq '.NetworkSettings'
ss -tulpen
Beispiel: Die Anwendung ist erreichbar aus dem Container, aber nicht
vom Host. Mögliche Ursache: python -m http.server bindet
standardmäßig nur an localhost.
Crashloops haben fast immer dieselben Gründe:
Diagnosekette:
podman logspodman events --since 10m → zeigt Crash-Zeitpunktepodman inspect --format '{{.State.ExitCode}}'journalctl -k | grep -i oomWenn Logs leer sind, war es fast sicher OOM oder ein Policy-Enforcement.
Ursachen sind fast immer dieselben:
Diagnose:
podman inspect <ctr> | jq '.Mounts'
df -h
df -i
ls -lZ
Fehlerbild:
permission denied
→ Aufmerksamkeit auf SELinux-Labels
(container_file_t).
Netzwerkfehler im Container sind oft klar strukturiert:
Diagnose:
podman exec <ctr> ip route
podman exec <ctr> ping <gateway>
podman exec <ctr> dig google.com
Wenn DNS nicht funktioniert, meistens: falsches
/etc/resolv.conf im Host.
Dieses Muster tritt auf, wenn Entwickler Volumes oder Overlay-Verhalten nicht kennen. Typische Ursachen:
Diagnose:
podman diff <ctr>
podman volume inspect
Wenn Daten nur im Upper-Layer liegen → beim Recreate verloren.
Performanceprobleme entstehen oft nicht in der Anwendung, sondern in der Containerlaufzeit:
Diagnose:
podman stats
iostat -xz
podman exec <ctr> time curl http://service
Im rootless Mode sind slirp4netns-Latenzen ein typischer Grund für „gefühlt langsame“ Container.
Dieses Muster beruht selten auf mystischen Unterschieden, sondern auf reproduzierbaren Parametern:
Diagnose:
podman inspect
podman system info
grep <user> /etc/subuid
Insbesondere rootless Cgroups führen zu anderen Limits als rootful.
Hier sind möglich:
Diagnose:
podman stats
ps auxf
podman diff
Ein wachsender UpperDir zeigt oft ein ungewolltes Write-Pattern.
Pods mit mehreren Containern erzeugen eigene Fehlerszenarien:
Diagnose:
podman pod inspect
podman pod logs
Wichtig: Pod-Start bedeutet nicht Container-Start.
Viele Entwickler vergessen, dass Container nicht wie Rootprozesse agieren dürfen.
Beispiele:
CAP_NET_RAW fehlt → ping funktioniert nichtCAP_SYS_TIME fehlt → Prozess kann Zeit nicht
setzenptrace, clone3,
mknodDiagnose:
podman inspect | jq '.HostConfig.CapAdd'
strace -p <pid>
Fehlt CAP_NET_ADMIN, funktionieren iptables-Kommandos
nicht.
Ein weiterer Klassiker:
Diagnose:
ip route
ip addr
systemd-resolve --status
VPN-Probleme erzeugen Containerfehler, die keinerlei Containerursache haben – ein typisches Muster.
Diese Fehlermuster sind de facto die „Big Twelve“ im Containerbereich. Wer sie erkennt, wird in der Lage sein, 90 Prozent aller Podman-Probleme innerhalb weniger Minuten systematisch zu isolieren.