Docker: Fügen Sie einem bereits erstellten Container eine Neustartrichtlinie hinzu


229

Ich sehe, dass Docker so genannte Neustartrichtlinien hinzugefügt hat, um den Neustart von Containern im Falle eines Neustarts zu handhaben.

Dies ist zwar sehr nützlich, aber ich sehe, dass der Befehl zum Neustarten der Richtlinie nur funktioniert docker runund nicht docker start. Meine Frage lautet also:

Gibt es eine Möglichkeit, einem Container, der bereits in der Vergangenheit erstellt wurde, Neustartrichtlinien hinzuzufügen?


Sie sollten die akzeptierte Antwort in die von @Yale Huang ändern. Die akzeptierte Antwort ist bei aktuellen Docker-Versionen falsch. Ich verstehe, dass die Antwort Ihnen damals vielleicht geholfen hat, aber jetzt ist sie irreführend.
Stepan Vavra

2
Getan. Danke für die Warnung.
Enrique Moreno Zelt

Antworten:


574

In neueren Versionen von Docker (ab 1.11) haben Sie einen updateBefehl:

docker update --restart=always <container>

9
Es sieht so aus, als ob dies in Docker 1.11.0 hinzugefügt wurde.
Phansen


4
Sollte die akzeptierte Antwort mit dem Vorbehalt sein, dass es ab Docker 1.11 funktioniert.
JohnDoe

6
mit Docker 17.09 musste ich docker update --restart always <container> docs.docker.com/engine/admin/start-containers-automatically
HarlemSquirrel

4
docker updatemehrere Container - IDs akzeptiert, so dass keine Notwendigkeit für xargsüberhaupt, nur tun docker update --restart=always $(docker ps -q).
Markusk

49

Es gibt zwei Ansätze, um RestartPolicy zu ändern:

  • Finden Sie die Container-ID heraus, beenden Sie den gesamten Docker-Dienst, ändern Sie /var/lib/docker/containers/CONTAINER_ID/hostconfig.json, setzen Sie RestartPolicy -> Name auf "immer" und starten Sie den Docker-Dienst.
  • docker commit Stoppen Sie Ihren Container als neues Image, stoppen Sie den aktuellen Container und starten Sie einen neuen Container mit dem Image.

2
Container stoppen, bearbeiten, Container starten. klappt wunderbar. Ich weiß nicht, warum die Bearbeitung deaktiviert ist.
Nebel

2
Endlich eine vernünftige Antwort :)
Navin

Arbeitete für mich auf einem alten Server mit Docker 1.10 (nicht fragen 😱). Leider docker updatekann nur Neustart - Richtlinie auf 1.11+ ändern
Igor Kupczyński

1

Die Verwendung der --restart=alwaysRichtlinie behandelt den Neustart vorhandener Container im Falle eines Neustarts.

Das Problem ist , dass , wenn es mehr Container mit , --restart=alwayswenn Sie Bild einer neueren Version laufen , wie in diskutiert Docker - wie wollen Sie deaktivieren Auto-Neustart auf einen Behälter? .

Der Versuch, den Container automatisch zu entfernen, wenn er per Put-Option vorhanden ist, docker run --rmführt ebenfalls zu Problemen mit der --restart=always Richtlinie, da sie in Konflikt miteinander stehen .

$ docker run --rm --restart always <image>
Conflicting options: --restart and --rm

In diesem Fall ist es daher besser, eine andere Option zu wählen: --Starten Sie die Richtlinie neu, sofern sie nicht gestoppt ist.

$ docker run --rm --restart unless-stopped <image>

Diese Richtlinie widerspricht nicht dem docker run --rm, wie in der Docker-Dokumentation erläutert :

Ähnlich wie --restart=always, außer dass der Container beim Stoppen (manuell oder auf andere Weise) auch nach dem Neustart des Docker-Dämons nicht neu gestartet wird.

Wenn Sie diese --restart unless-stoppedRichtlinie verwenden, um sicherzustellen, dass der Neustart funktioniert, falls er beim Schließen des Terminals versehentlich stoppt, gehen Sie wie folgt einmal in einem anderen Terminal vor :

$ docker ps
$ docker restart <container>

Warten Sie, bis der Tötungsprozess in der vorherigen Shell beendet ist, schließen Sie sie und gehen Sie einfach ( nicht beenden ).
Überprüfen Sie im verbleibenden Terminal erneut, ob der Container noch läuft:

$ docker ps

Wenn es noch ausgeführt wird, können Sie sicher neu starten und erneut überprüfen, ob die Anwendung neu gestartet wird, und feststellen, dass Ihr Docker sauber ist, ohne dass mehrere Container verwendet werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.