Docker Restart-Policy: Container automatisch neu starten

Nach einem Server-Neustart sind alle Container weg? Oder ein abgestürzter Dienst bleibt einfach liegen? Dann fehlt die passende Restart-Policy. In dieser Anleitung erklären wir die Docker Restart-Policiesno, on-failure, always und unless-stopped – und zeigen dir, wie deine Container nach Absturz oder Reboot automatisch wieder anlaufen.

Startet dein Server neu, sollen wichtige Container von selbst wieder hochfahren – ohne dass du dich per SSH einloggen musst. Genau das regelt die Docker Restart-Policy. Sie legt fest, ob und wann ein Container automatisch neu gestartet wird: nach einem Absturz, nach einem Reboot oder gar nicht. In dieser Anleitung lernst du die vier Policies kennen, wählst die richtige für deinen Anwendungsfall und vermeidest die typische Falle der endlosen Neustart-Schleife.

Was ist eine Restart-Policy?

Eine Restart-Policy legt fest, ob und wann Docker einen Container automatisch neu startet. Ohne sie bleibt ein Container, der abstürzt oder beim Server-Reboot stoppt, einfach beendet. Für dauerhaft laufende Dienste – Webserver, Datenbanken, Portainer – ist eine Restart-Policy daher Pflicht.


Die vier Policies im Vergleich

PolicyVerhalten
noStandard. Container wird nie automatisch neu gestartet.
on-failureNeustart nur, wenn der Container mit Fehler (Exit-Code ≠ 0) endet. Optional mit Versuchslimit.
alwaysImmer neu starten – auch nach einem Docker-/Server-Neustart. Selbst nach manuellem Stopp startet er beim Docker-Start wieder.
unless-stoppedWie always, aber ein manuell gestoppter Container bleibt nach einem Docker-Neustart gestoppt.

Für die meisten Selfhosting-Dienste ist unless-stopped die beste Wahl: Die Container überleben Reboots, respektieren aber ein bewusstes manuelles Stoppen.


Restart-Policy bei docker run setzen

Beim Start eines Containers gibst du die Policy über --restart an:

docker run -d --restart unless-stopped --name webserver nginx:latest

Mit on-failure kannst du zusätzlich die maximale Zahl der Versuche begrenzen:

docker run -d --restart on-failure:5 --name job meine-app:latest

Restart-Policy in docker-compose.yml

In Compose setzt du die Policy pro Dienst über den Schlüssel restart. Das ist der Normalfall im Alltag:

services:
  web:
    image: nginx:latest
    restart: unless-stopped
  datenbank:
    image: postgres:16
    restart: unless-stopped

Die Grundlagen dazu findest du in Docker Compose installieren.


Policy eines laufenden Containers ändern

Du musst einen Container nicht neu erstellen, um die Policy anzupassen. Das geht im laufenden Betrieb mit docker update:

docker update --restart unless-stopped mein-container

Welche Policy aktiv ist, verrät dir ein Blick in die Container-Details:

docker inspect -f "{{.HostConfig.RestartPolicy.Name}}" mein-container

Restart-Policy vs. Watchtower

Ein häufiges Missverständnis: Eine Restart-Policy sorgt dafür, dass ein Container läuft – sie aktualisiert ihn aber nicht. Für automatische Updates ist Watchtower zuständig. Beides ergänzt sich: Die Policy hält den Dienst am Leben, Watchtower hält ihn aktuell. Bleibt ein Container trotz Policy in einer Neustart-Schleife hängen, hilft ein Blick in die Container-Logs.


Die vier Policies im Überblick

Docker bietet vier Restart-Policies, die sich im Verhalten bei Absturz und Reboot unterscheiden. Für dauerhaft laufende Dienste ist unless-stopped meist die beste Wahl, weil sie nach einem Reboot startet, ein bewusst gestoppter Container aber gestoppt bleibt.

PolicyNach AbsturzNach Reboot
noNeinNein
on-failureNur bei FehlercodeNein
alwaysJaJa
unless-stoppedJaNur wenn nicht manuell gestoppt

always oder unless-stopped?

Der Unterschied ist subtil, aber wichtig. Beide starten einen abgestürzten Container neu. Der Unterschied zeigt sich nach einem Reboot: always startet den Container selbst dann, wenn du ihn vorher bewusst mit docker stop angehalten hast. unless-stopped respektiert deinen manuellen Stopp und lässt ihn aus. Für die meisten Selfhosting-Dienste ist unless-stopped daher die intuitivere Wahl.

Beachte außerdem: Die Restart-Policy greift nur, wenn der Docker-Daemon selbst läuft. Damit Container nach einem Server-Neustart hochfahren, muss der Docker-Dienst über systemd aktiviert sein (sudo systemctl enable docker). Fehlt dieser Schritt, wunderst du dich nach jedem Reboot, warum trotz always nichts startet – die Policy war korrekt, nur der Daemon wurde nie automatisch gestartet.

Ein weiterer Punkt betrifft die Startreihenfolge abhängiger Dienste. Braucht dein Anwendungscontainer eine Datenbank, verhindert eine reine Restart-Policy nicht, dass er vor der Datenbank hochfährt und dabei zunächst scheitert. Hier hilft in Compose die Kombination aus depends_on und einem Healthcheck, damit Docker erst weitermacht, wenn die Abhängigkeit wirklich bereit ist. Die Restart-Policy fängt dann nur noch echte Ausnahmefälle ab, statt einen strukturellen Fehler zu kaschieren.


Neustart-Schleifen erkennen und stoppen

Eine falsch konfigurierte Anwendung, die beim Start sofort abstürzt, kann in eine endlose Neustart-Schleife geraten und dabei CPU-Last erzeugen. Docker federt das mit einem zunehmenden Backoff ab, verhindert das Grundproblem aber nicht. Erkennen kannst du es in der Statusspalte von docker ps („Restarting“) oder im Feld RestartCount.

  • Prüfe die Ursache in den Logs mit docker logs, bevor du blind neu startest.
  • Nutze on-failure:5, um die Zahl der Versuche zu begrenzen.
  • Stoppe eine laufende Schleife mit docker update --restart=no container.

Häufige Fragen

Häufige Fragen rund um die Docker Restart-Policy.

Kann ich die Policy eines laufenden Containers ändern?

Ja, mit docker update --restart=unless-stopped container passt du die Policy an, ohne den Container neu erstellen zu müssen.

Warum startet mein Container nach dem Reboot nicht?

Häufig ist der Docker-Dienst selbst nicht für den Autostart aktiviert. Prüfe das mit systemctl is-enabled docker und aktiviere ihn bei Bedarf.

Welche Policy nutze ich in docker-compose.yml?

Setze restart: unless-stopped unter dem jeweiligen Dienst. So gilt die Policy für alle mit dem Stack gestarteten Container.


Fazit

Mit der richtigen Restart-Policy laufen deine Container zuverlässig – auch nach Abstürzen und Reboots. Merke dir unless-stopped als Standard für dauerhafte Dienste und on-failure für Aufgaben, die nur im Fehlerfall neu starten sollen. Kombiniert mit Watchtower und sauberen Logs hast du eine stabile, wartungsarme Docker-Umgebung. Weitere Stolperfallen behandelt Die 10 häufigsten Docker-Fehler.

Siehe auch  Site-to-Site VPN: UniFi Router mit Linux Server (VPS) verbinden
Nach oben scrollen