it-swarm.com.de

Wie starte ich Docker-Container beim Systemstart automatisch?

Was ist ein guter Weg, um Docker-Container beim Systemstart automatisch zu starten?

Gibt es eine bevorzugte Möglichkeit, dies unter Ubuntu 14.04 zu tun?

Ich habe in der Vergangenheit supervisord verwendet, um Web-Apps automatisch zu starten. Aber das scheint für Docker nicht das Richtige zu sein.

115
Stefan Arentz

Anscheinend besteht die aktuelle Methode zum automatischen Starten von Docker-Containern ( ab Docker 1.2 ) darin, Richtlinien neu starten zu verwenden. Dadurch wird gesteuert, wie Docker das Starten des Containers beim Start und das Neustarten des Containers beim Beenden handhaben soll. Ich habe bisher die Option "Immer" verwendet und kann bestätigen, dass Docker den Container beim Systemstart automatisch startet:

Sudo docker run --restart=always -d myimage

Dokumentationsauszug

Neustartrichtlinien Mit dem Flag --restart beim Ausführen von Docker können Sie eine Neustartrichtlinie angeben, wie ein Container beim Beenden neu gestartet werden soll oder nicht.

nein - Starten Sie den Container beim Verlassen nicht neu.

on-Failure - Starten Sie den Container nur neu, wenn er mit einem Exit-Status ungleich Null beendet wird.

immer - Starten Sie den Container unabhängig vom Ausgangsstatus immer neu.

Sie können auch angeben, wie oft Docker maximal versuchen soll, den Container neu zu starten, wenn die Richtlinie für Fehler verwendet wird. Standardmäßig versucht Docker für immer, den Container neu zu starten.

$ Sudo docker run --restart=always redis

Dadurch wird der Redis-Container mit der Neustartrichtlinie "Immer" ausgeführt, sodass Docker ihn beim Beenden des Containers neu startet.

$ Sudo docker run --restart=on-failure:10 redis

Dadurch wird der Redis-Container mit einer Neustartrichtlinie bei einem Fehler und einer maximalen Neustartanzahl von 10 ausgeführt. Wenn der Redis-Container mehr als zehn Mal hintereinander mit einem Exit-Status ungleich Null beendet wird, bricht Docker den Versuch ab, den Container neu zu starten. Die Angabe eines maximalen Neustartlimits gilt nur für die On-Failure-Richtlinie.

141
aknuds1

Docker hat diese Seite , das erklärt, wie es mit upstart und systemd gemacht wird. Ich stimme zu, dass es für Docker nicht das Richtige zu sein scheint. Ihre Lösung besteht darin, docker start Auszuführen, wobei davon ausgegangen wird, dass Sie Ihren Container bereits erstellt haben. Ich würde denken, dass Sie entweder docker run --rm Im Upstart-Skript ausführen (es wie einen brandneuen Prozess und Container aus einem Image behandeln) oder einfach den Docker-Daemon die Container selbst beim Booten neu starten lassen (wie es sein wird) Standard, wenn Sie nichts anderes tun). Upstart hat den Vorteil, dass Prozesse einfach gestartet/gestoppt werden können, aber Sie erhalten dies auch mit dem Start/Stopp von Docker!

Ich finde es seltsam, den Benutzer zu zwingen, manuell einen Container (mit allen korrekten Port-/Volume-Bindungen) zu erstellen, bevor das Upstart-Skript funktioniert.

8

Aber das scheint für Docker nicht das Richtige zu sein.

Warum nicht?

Ich benutze Supervisord dafür mit großem Erfolg.

Verwenden Sie, was Sie wissen, verwenden Sie, was funktioniert, verwenden Sie etwas, das Sie leicht warten und verstehen können.

6
EEAA