Healthchecks designen: Readiness vs. Liveness in Docker Compose

In Docker Compose und Container-Orchestrierungen wie Swarm oder Kubernetes sind Healthchecks essenziell, um die Stabilität und Ausfallsicherheit von Services sicherzustellen. Dabei unterscheidet man zwischen Readiness und Liveness, um festzustellen, ob ein Container bereit für Traffic ist oder ob er neu gestartet werden muss.

1. Grundlagen von Healthchecks

Ein Healthcheck prüft regelmäßig, ob ein Container korrekt funktioniert. Docker bietet dafür die HEALTHCHECK-Instruktion im Dockerfile und die healthcheck-Sektion in Compose-Dateien.

services:
  web:
    image: myapp:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3
  • test: Befehl, der den Gesundheitszustand prüft.
  • interval: Zeit zwischen zwei Checks.
  • timeout: Maximale Dauer eines Checks.
  • retries: Anzahl der fehlgeschlagenen Checks, bevor der Container als ungesund gilt.

2. Liveness vs. Readiness

Diese beiden Healthcheck-Arten erfüllen unterschiedliche Aufgaben:

Liveness

Ein Liveness-Check prüft, ob ein Container noch läuft und funktionsfähig ist. Scheitert dieser, wird der Container automatisch neu gestartet.

services:
  api:
    image: myapi:latest
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U admin"]
      interval: 30s
      timeout: 5s
      retries: 3
  • Hilft, Crashloops zu erkennen und Container automatisch zu recovern.
  • Wichtig für langfristige Stabilität und Self-Healing-Mechanismen.

Readiness

Ein Readiness-Check prüft, ob ein Container bereit ist, Traffic zu empfangen. Fehlschläge verhindern, dass der Container in Load-Balancing-Pools aufgenommen wird, lösen aber keinen Neustart aus.

services:
  web:
    image: myweb:latest
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:8080/ready || exit 1"]
      interval: 15s
      timeout: 5s
      retries: 2
  • Verhindert, dass Benutzer oder andere Services auf nicht bereite Container zugreifen.
  • Besonders relevant beim Hochfahren komplexer Services mit Abhängigkeiten.

3. Healthcheck Design in Compose

Beim Entwurf von Healthchecks sollten folgende Punkte berücksichtigt werden:

  • Kurze Checks (<10s), um Blockaden zu vermeiden.
  • Intervalle und Retries so setzen, dass temporäre Latenzen toleriert werden.
  • Trennung von Liveness und Readiness, wenn Startzeiten variieren oder Init-Prozesse lange dauern.
  • Verwendung von CMD-SHELL für komplexe Prüfungen oder Pipe-Operationen.

Beispiel Multi-Service

services:
  db:
    image: postgres:15
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U admin"]
      interval: 30s
      retries: 5

api:
image: myapi:latest
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:5000/health || exit 1"]
interval: 20s
retries: 3

  • Hier wartet die API auf die gesunde DB bevor sie als bereit gilt.
  • Verhindert Startprobleme und Race Conditions zwischen Services.

4. Kombination mit Restart Policies

Healthchecks werden besonders wirksam, wenn sie mit Restart Policies kombiniert werden.

services:
  worker:
    image: jobrunner:latest
    deploy:
      restart_policy:
        condition: on-failure
    healthcheck:
      test: ["CMD-SHELL", "check-jobs.sh"]
      interval: 30s
      retries: 3
  • Fehlgeschlagene Liveness-Checks führen so automatisch zu einem Neustart.
  • Readiness-Checks verhindern lediglich die Aufnahme in Load-Balancer.

5. Monitoring und Debugging

Zur Beobachtung und Analyse von Healthchecks:

  • docker ps zeigt healthy/unhealthy Status.
  • docker inspect <container> liefert detaillierte Healthcheck-Ergebnisse.
  • Logs für fehlerhafte Checks prüfen, z. B. docker logs <container>.
  • Bei komplexen Multi-Service-Stacks sollten Healthchecks auf Abhängigkeiten achten.

6. Best Practices

  • Für jeden Service eigene Healthchecks definieren, keine globalen Checks.
  • Liveness prüft intern, Readiness prüft extern zugängliche Endpunkte.
  • Vermeiden von zu kurzen Intervallen, um unnötige Neustarts zu verhindern.
  • Healthchecks als Teil der CI/CD-Pipeline testen.
  • Dokumentation der Check-Logik, um Team-Konsistenz zu sichern.

7. Troubleshooting

Typische Probleme:

  • Container wird ständig als ungesund markiert: Prüfen ob Timeout oder Test-Befehl korrekt ist.
  • Readiness falsch implementiert: Container nimmt Traffic zu früh an.
  • Liveness zu aggressiv: Container wird unnötig neu gestartet.
  • Abhängigkeiten zwischen Services nicht berücksichtigt: depends_on: condition: service_healthy nutzen.

8. Zusammenfassung

Die richtige Trennung von Liveness und Readiness in Docker Compose ermöglicht stabile, ausfallsichere Deployments. Liveness sorgt für Self-Healing, Readiness für kontrollierte Traffic-Aufnahme. Mit abgestimmten Intervallen, Retries und Restart-Policies lassen sich Container-Stacks zuverlässig betreiben und Probleme frühzeitig erkennen.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles