Healthchecks in Docker Compose: Dienste zuverlässig überwachen

Healthchecks in Docker Compose sind ein wesentliches Werkzeug, um die Zuverlässigkeit und Stabilität von containerisierten Diensten zu gewährleisten. Sie ermöglichen es, den Status eines Containers regelmäßig zu überprüfen und sicherzustellen, dass nur gesunde Dienste Traffic erhalten oder abhängige Services starten. Dieses Tutorial erklärt praxisnah, wie Healthchecks definiert, konfiguriert und sinnvoll in Microservices- oder Multi-Container-Umgebungen eingesetzt werden.

Grundlagen von Healthchecks

Ein Healthcheck überprüft, ob ein Container ordnungsgemäß funktioniert. Docker nutzt diese Information, um den Status des Containers als healthy, unhealthy oder starting zu markieren. Abhängige Container können auf diesen Status reagieren, um z. B. nur dann zu starten, wenn ein Service verfügbar ist.

Parameter eines Healthchecks

Healthchecks in Docker Compose können mit folgenden Parametern definiert werden:

  • test: Der Befehl oder das Skript, das die Überprüfung durchführt
  • interval: Zeit zwischen zwei Prüfungen
  • timeout: Maximale Zeit, die ein Test dauern darf
  • retries: Anzahl fehlgeschlagener Versuche, bevor ein Container als unhealthy gilt
  • start_period: Zeit, die Docker nach Containerstart wartet, bevor Healthchecks beginnen

Beispiel: Healthcheck für eine PostgreSQL-Datenbank

services:
  db:
    image: postgres:16
    container_name: db
    environment:
      POSTGRES_USER: appuser
      POSTGRES_PASSWORD: securepassword
      POSTGRES_DB: appdb
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U appuser"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s
    volumes:
      - db_data:/var/lib/postgresql/data
  • test: Prüft, ob die Datenbank Verbindungen akzeptiert
  • interval: Alle 10 Sekunden
  • timeout: 5 Sekunden pro Test
  • retries: 5 fehlgeschlagene Tests markieren den Container als unhealthy
  • start_period: Verzögerung von 10 Sekunden nach Containerstart

Healthcheck für Webservices

Für HTTP-basierte Services können einfache curl-Aufrufe genutzt werden, um Endpunkte zu prüfen.

services:
  api:
    image: myorg/api-service:latest
    container_name: api
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 15s
      timeout: 5s
      retries: 3
  • Der /health-Endpoint liefert 200 OK, wenn der Service gesund ist
  • Docker markiert den Container nur als healthy, wenn der Test erfolgreich ist

Healthchecks für Abhängigkeiten mit depends_on

Docker Compose kann abhängig von Healthchecks anderer Services starten. So wird sichergestellt, dass ein Service erst startet, wenn alle Abhängigkeiten verfügbar sind.

services:
  frontend:
    image: myorg/frontend-service:latest
    depends_on:
      db:
        condition: service_healthy
      api:
        condition: service_healthy
  • Der frontend-Service startet erst, wenn db und api als healthy markiert sind
  • Verhindert Fehler durch nicht erreichbare Abhängigkeiten

Healthchecks für Caches wie Redis

services:
  redis:
    image: redis:8
    container_name: redis
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
    volumes:
      - cache_data:/data
  • redis-cli ping liefert PONG, wenn der Container gesund ist
  • Healthcheck verhindert, dass abhängige Services auf einen nicht funktionsfähigen Cache zugreifen

Praktische Tipps für Healthchecks

  • Endpoints oder Services prüfen, die kritisch für die Anwendung sind
  • Timeouts nicht zu kurz setzen, um falsche unhealthy-Status zu vermeiden
  • Startperiod nutzen, um Containern Zeit zum Hochfahren zu geben
  • Alle Services versionieren, um Rollbacks zu erleichtern
  • Monitoring kombinieren: Docker Healthchecks + externes Monitoring für höhere Zuverlässigkeit

Stack starten und Healthchecks überwachen

Stack starten:

docker-compose up -d

Healthstatus der Container prüfen:

docker ps
docker inspect --format='{{json .State.Health}}' db
docker inspect --format='{{json .State.Health}}' api

Logs der Healthchecks einsehen:

docker-compose logs -f db
docker-compose logs -f api

Updatefähigkeit und Rollbacks

Durch Healthchecks können Updates sicher durchgeführt werden. Container werden nur als bereit markiert, wenn alle Healthchecks erfolgreich sind, was ein kontrolliertes Rollout ermöglicht.

docker-compose pull
docker-compose up -d

Zusammenfassung

Healthchecks in Docker Compose sind essenziell, um die Zuverlässigkeit von containerisierten Diensten zu erhöhen. Sie sichern den Start von abhängigen Services, überwachen kritische Endpunkte und erleichtern Updates und Rollbacks. Kombiniert mit persistenter Speicherung, Netzwerken und Monitoring tragen Healthchecks entscheidend zu stabilen Microservices- oder Multi-Container-Umgebungen bei.

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