Compose Restart Strategies: backoff, healthcheck gating, failure domains

In produktiven Docker Compose Umgebungen ist es entscheidend, dass Container bei Fehlern zuverlässig neu gestartet werden, ohne dass das System in eine unkontrollierte Restart-Schleife gerät. Compose bietet mehrere Strategien, um Neustarts zu steuern, Backoff-Zeiten zu konfigurieren und die Verfügbarkeit über Healthchecks und Failure Domains zu erhöhen. Dieser Artikel erläutert praxisnah, wie diese Mechanismen effektiv eingesetzt werden können.

1. Grundlagen der Restart-Strategien

Docker Compose erlaubt die Definition von Restart-Policies für jeden Service. Diese steuern, unter welchen Bedingungen ein Container automatisch neu gestartet wird.

Verfügbare Optionen

  • no: Container wird nie automatisch neu gestartet.
  • always: Container wird immer neu gestartet, unabhängig vom Exit-Status.
  • on-failure[:max-retries]: Container wird nur bei einem Fehler (Exit-Code ≠ 0) neu gestartet, optional mit maximaler Anzahl an Versuchen.
  • unless-stopped: Container wird immer neu gestartet, außer er wurde manuell gestoppt.

Beispiel in Docker Compose

version: "3.9"
services:
  web:
    image: my_web_app
    restart: on-failure:5

Hier wird der Web-Service bei Fehlern maximal fünfmal automatisch neu gestartet.

2. Exponentielles Backoff implementieren

Unkontrollierte Neustarts bei sofortigen Fehlern können Ressourcen belasten und Logs füllen. Ein exponentielles Backoff verzögert jeden erneuten Start schrittweise.

Beispiel mit Compose und Systemd

[Service]
ExecStart=/usr/local/bin/docker-compose up
Restart=on-failure
RestartSec=5s
StartLimitIntervalSec=60
StartLimitBurst=3

Docker Compose selbst bietet keine native Backoff-Logik, daher wird häufig Systemd zur Umsetzung genutzt, um Verzögerungen und maximale Neustartanzahl zu steuern.

3. Healthcheck-Gating nutzen

Healthchecks prüfen, ob ein Container funktionsfähig ist, bevor er als verfügbar gilt. Compose kann die Restart-Strategie mit Healthchecks kombinieren.

Healthcheck-Definition

services:
  db:
    image: postgres:15
    restart: on-failure
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 30s
      timeout: 10s
      retries: 3

Der Container gilt erst nach erfolgreichem Healthcheck als gesund. Fehlende Healthchecks können falsche Neustarts oder Traffic-Verteilung verursachen.

4. Failure Domains und Service-Isolation

In Multi-Host-Umgebungen können Failure Domains definiert werden, um die Auswirkungen eines Container-Ausfalls zu begrenzen. Dies reduziert das Risiko, dass ein Fehler die gesamte Umgebung beeinträchtigt.

Praktische Umsetzung

  • Docker Swarm oder Compose auf verschiedenen Hosts ausrollen.
  • Service-Skalierung nutzen, um Last auf mehrere Container zu verteilen.
  • Labels und Constraints verwenden, um Container gezielt auf bestimmten Hosts zu platzieren.

Beispiel für Node-Constraint

services:
  web:
    image: my_web_app
    deploy:
      placement:
        constraints:
          - node.labels.role == web

So wird der Service nur auf Nodes mit dem Label role=web gestartet, wodurch Fehlerisolierung ermöglicht wird.

5. Kombination von Restart, Backoff und Healthchecks

Die effektivste Strategie kombiniert Restart-Policies, exponentielles Backoff und Healthchecks. Dies verhindert aggressive Neustart-Schleifen und erhöht die Stabilität der Umgebung.

services:
  api:
    image: api_service:latest
    restart: on-failure:10
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
      interval: 20s
      timeout: 5s
      retries: 3

Hier wird der API-Service maximal zehnmal neu gestartet, Healthchecks steuern die Verfügbarkeit, und durch Systemd oder externe Scheduler kann ein Backoff implementiert werden.

6. Monitoring und Alerts

Automatisiertes Monitoring sollte die Restart-Vorgänge überwachen. Prometheus, Grafana oder ELK Stack eignen sich zur Visualisierung von Neustarts, Healthcheck-Status und Fehlerzahlen.

# Prometheus-Beispiel für Container-Restarts
rate(docker_container_start_total{container_label_com_docker_compose_service="api"}[5m])

Alerts können ausgelöst werden, wenn die Restart-Rate ungewöhnlich hoch ist.

7. Best Practices

  • Definieren Sie für jeden Service eine angemessene Restart-Policy.
  • Implementieren Sie Healthchecks für kritische Services.
  • Exponentielles Backoff nutzen, um Neustart-Spamming zu verhindern.
  • Multi-Host-Deployments in Failure Domains planen.
  • Monitoring und Alerting konfigurieren, um Probleme frühzeitig zu erkennen.

8. Zusammenfassung

Docker Compose bietet verschiedene Mechanismen, um Container-Restarts zu steuern. Die Kombination aus Restart-Policies, Healthchecks, Backoff-Mechanismen und Failure Domains sorgt für stabile Deployments. Durch Monitoring und Alerting lassen sich Probleme frühzeitig erkennen und Ausfälle minimieren. Für produktive Umgebungen empfiehlt es sich, diese Strategien konsistent in Docker Compose YAML-Dateien zu definieren und regelmäßig zu überprüfen.

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