Skip to content
BotServBotServ
DockerRestartPolicyalwaysunless-stopped

Docker-Container-Neustarts richtig konfigurieren

Restart-Policies in Docker und Compose. unless-stopped, always, on-failure und Neustart-Strategien.

S

schutzgeist

3 min read
Docker-Container-Neustarts richtig konfigurieren

Docker-Container-Neustarts richtig konfigurieren

Was dieser Artikel über Container-Neustarts behandelt

  • Welche Restart-Policies es gibt.
  • Unterschiede zwischen always, unless-stopped und on-failure.
  • Wie man Policies in Compose setzt.
  • Wann welche Policy sinnvoll ist.
  • Typische Fehler und deren Lösungen.

Einleitung: Docker-Container-Neustarts richtig konfigurieren

In produktiven Setups sollen Container nach einem Absturz, einem Server-Neustart oder einem Fehler automatisch wieder hochfahren. Docker bietet dafür sogenannte Restart-Policies. Sie legen fest, wann und wie oft ein Container neu gestartet wird. Die falsche Policy kann aber auch dazu führen, dass ein defekter Container endlos versucht zu starten oder unerwünschte Neustarts verursacht.

Dieser Artikel zeigt, wie man Restart-Policies richtig einsetzt.

Wichtige Begriffe

  • Restart-Policy: Verhalten beim Beenden des Containers.
  • always: Container wird immer neu gestartet, auch nach Reboot.
  • unless-stopped: Startet neu, ausser der Container wurde manuell gestoppt.
  • on-failure: Nur bei Fehlern.
  • no: Kein automatischer Neustart.
  • restart_delay: Wartezeit zwischen Neustarts.
  • max-retries: Maximale Versuche für on-failure.
  • exit code: Rückgabewert des Prozesses.

Verfügbare Restart-Policies

PolicyBeschreibung
noNie automatisch neu starten.
on-failureNeu starten, wenn Exit-Code ungleich 0.
alwaysImmer neu starten, auch nach Server-Reboot.
unless-stoppedImmer neu starten, ausser manuell gestoppt.

always

services:
  app:
    image: nginx
    restart: always

Sinnvoll für Dienste, die nach einem Reboot sofort laufen sollen. Achtung: Container startet auch nach docker stop neu, wenn Docker-Daemon neu startet.

unless-stopped

services:
  app:
    image: nginx
    restart: unless-stopped

Beste Wahl für die meisten Homelabs. Container startet nach Reboot neu, aber nicht, wenn er explizit gestoppt wurde.

on-failure

services:
  app:
    image: mein-app
    restart: on-failure
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3

Sinnvoll für Batch-Jobs oder Anwendungen, bei denen Neustarts nach Erfolg nicht erwünscht sind.

no

services:
  app:
    image: mein-app
    restart: "no"

Für einmalige Aufgaben, Tests oder Debugging.

In Compose

services:
  web:
    image: nginx
    restart: unless-stopped
  db:
    image: postgres
    restart: always

Docker Run

docker run -d --name web --restart unless-stopped nginx

Restart-Counter prüfen

docker ps -a

In docker inspect:

docker inspect --format='{{.RestartCount}}' <container>

Endlos-Neustarts vermeiden

  • Healthchecks nutzen.
  • max_attempts setzen.
  • Ursache für Fehler finden, statt blind zu wiederholen.
  • on-failure statt always bei unsicheren Anwendungen.

Beispiel: Datenbank und App

services:
  db:
    image: postgres:16
    restart: always
    environment:
      POSTGRES_PASSWORD: geheim
    volumes:
      - db_data:/var/lib/postgresql/data

  app:
    image: mein-app
    restart: unless-stopped
    depends_on:
      - db
    ports:
      - "3000:3000"

volumes:
  db_data:

Restart nach System-Update

sudo systemctl enable docker

Stellt sicher, dass Docker beim Boot startet, und damit auch Container mit always oder unless-stopped.

Tipps

  • unless-stopped als Standard für meiste Dienste.
  • always für kritische Infrastruktur wie Datenbanken.
  • on-failure für Jobs, die nicht dauerhaft laufen sollen.
  • Niemals always für kaputte Container, erzeugt Boot-Schleifen.
  • Logs überwachen, um Neustartgründe zu finden.
  • depends_on nutzen, um Startreihenfolge zu steuern.

Typische Stolpersteine

  • always und trotzdem nicht gestartet: Docker-Daemon läuft nicht beim Boot.
  • Endlosschleife: Container stürzt sofort ab, always startet neu.
  • unless-stopped startet doch: System wurde neu gestartet, nicht manuell gestoppt.
  • Abhängigkeiten: Datenbank noch nicht bereit, App startet erneut.
  • Falscher Exit-Code: Anwendung beendet sich mit 0, on-failure greift nicht.

FAQ: Docker-Container-Neustarts

Was ist der Unterschied zwischen always und unless-stopped? always startet auch nach docker stop, wenn der Daemon neu startet. unless-stopped startet nicht, wenn der Container zuvor gestoppt wurde.

Startet unless-stopped nach einem Reboot? Ja, solange der Container nicht manuell gestoppt wurde.

Wie verhindere ich Endlos-Neustarts? on-failure mit max_attempts oder Log-Fehler beheben.

Wann sollte ich no verwenden? Bei einmaligen Jobs, Tests oder Debugging.

Kann ich die Retry-Delay einstellen? Ja, in Compose mit deploy.restart_policy.delay.

Quellen und weiterführende Literatur

Zusammenfassung: Docker-Container-Neustarts richtig konfigurieren

Restart-Policies sorgen dafür, dass Container nach Fehlern oder Reboots automatisch wieder laufen. Für die meisten Homelab- und Produktivsetups ist unless-stopped die beste Wahl, da sie Neustarts nach Reboots erlaubt, aber manuelle Stopps respektiert. always ist für kritische Dienste geeignet, on-failure für Batch-Jobs. Wer Endlos-Neustarts vermeiden möchte, sollte Healthchecks, max_attempts und saubere Logs nutzen.

Zurück zum KI Blog
Share:

Ähnliche Beiträge