Wie starte ich Docker-Container beim Systemstart automatisch?

Was ist eine gute Möglichkeit, Docker-Container beim Hochfahren des Systems automatisch zu starten?

Gibt es einen bevorzugten Weg, dies unter Ubuntu 14.04 zu tun?

Ich habe verwendet supervisord in der Vergangenheit zum automatischen Starten von Web-Apps. Aber das fühlt sich für Docker nicht richtig an.

Anscheinend ist die aktuelle Methode zum automatischen Starten von Docker-Containern (von Docker 1.2) ist zu verwenden richtlinien zum Neustart. 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 nicht neu, wenn er beendet wird.

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 Exit-Status immer neu.

Sie können auch angeben, wie oft Docker maximal versucht, den Container neu zu starten, wenn Sie die On-Failure-Richtlinie verwenden. Standardmäßig versucht Docker für immer, den Container neu zu starten.

$ sudo docker run --restart=always redis

Dadurch wird der Redis-Container mit einer Neustartrichtlinie von immer ausgeführt, sodass Docker ihn neu startet, wenn der Container beendet wird.

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

Dadurch wird der Redis-Container mit einer Neustartrichtlinie von on-failure und einer maximalen Neustartanzahl von 10 ausgeführt. Wenn der Redis-Container mehr als 10 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 ist nur für die Richtlinie bei Ausfall gültig.

Docker hat diese Seite das erklärt, wie man es mit Upstart und systemd macht. Ich stimme zu, dass es für Docker nicht das Richtige zu sein scheint. Ihre Lösung ist zu laufen docker start, was davon ausgeht, dass Sie Ihren Container bereits erstellt haben. Ich würde denken, dass du es entweder tun würdest docker run --rm im Upstart-Skript (behandelt es wie einen brandneuen Prozess und Container aus einem Image) oder lassen Sie den Docker-Daemon die Container beim Booten selbst neu starten (wie standardmäßig, wenn Sie nichts anderes tun). Upstart hat den Vorteil, dass Prozesse einfach gestartet / gestoppt werden können, aber das bekommen Sie auch mit dockers Start / Stop!

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

Aber das fühlt sich für Docker nicht richtig an.

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 pflegen und verstehen können.