Offensichtlich besteht die aktuelle Methode zum automatischen Starten von Docker-Containern ( ab Docker 1.2 ) darin, Neustartrichtlinien zu verwenden . Hiermit wird gesteuert, wie Docker das Starten des Containers beim Start und das Neustarten des Containers beim Verlassen des Containers handhaben soll. Bisher habe ich die Option 'always' verwendet und kann bestätigen, dass Docker den Container beim Systemstart automatisch startet:
Neustartrichtlinien Mit dem Flag --restart bei der Ausführung von Docker können Sie eine Neustartrichtlinie festlegen, wie ein Container beim Beenden neu gestartet werden soll oder nicht.
no - 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.
always - Der Container wird unabhängig vom Beendigungsstatus immer neu gestartet.
Sie können auch festlegen, wie oft Docker maximal versucht, den Container neu zu starten, wenn die On-Failure-Richtlinie 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 always ausgeführt. Wenn der Container beendet wird, wird er von Docker neu gestartet.
$ sudo docker run --restart=on-failure:10 redis
Dadurch wird der Redis-Container mit einer Neustartrichtlinie bei Fehlschlagen und einer maximalen Neustartanzahl von 10 ausgeführt. Wenn der Redis-Container mehr als zehn Mal hintereinander mit einem Beendigungsstatus ungleich Null beendet wird, bricht Docker den Neustart des Containers ab. Die Angabe eines maximalen Neustartgrenzwerts gilt nur für die Richtlinie bei einem Fehler.
unless-stopped
wurde hinzugefügt. Es verhält sich so,always
aber wenn der Container gestoppt und das System neu gestartet wird oder der Docker-Daemon neu gestartet wird, wird der Container nicht neu gestartet. Sehen Sie hier für eine schöne Zusammenfassung aller 4 Optionen blog.codeship.com/…docker
Daemon automatisch starten, um dies zu unterstützen.Docker hat diese Seite , die 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 lautet "Ausführen". Dabei
docker start
wird davon ausgegangen, dass Sie Ihren Container bereits erstellt haben. Ich würde denken, dass Sie entwederdocker run --rm
das Upstart-Skript ausführen (es wie einen brandneuen Prozess und einen Container aus einem Image behandeln) oder den Docker-Daemon die Container selbst beim Booten neu starten lassen (wie es standardmäßig der Fall ist, wenn Sie nichts anderes tun) ). Upstart bietet den Vorteil, dass Prozesse einfach gestartet / gestoppt werden können. Dies ist jedoch auch beim Starten / Stoppen des Dockers der Fall!Ich finde es seltsam, den Benutzer zu zwingen, manuell einen Container (mit allen korrekten Port- / Volume-Bindungen) zu erstellen, bevor das Upstart-Skript funktioniert.
quelle
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.
quelle
--rm
?--rm
hier relevant ist.docker
ist das ein Ersatz fürlxc
oderopenvz
welchelxc.start.auto = 1
und habenvzctl set --onboot yes
. Auch ESXi und andere Virtualisierungslösungen verfügen über eine solche Funktion. Wie Lawrence glaube ich auch nicht, dass eine solche Autostart-Funktion auf verteilungsspezifische Weise implementiert werden sollte, da ein Docker-Benutzer in der Lage sein sollte, dasselbe Problem mit demselben Wissen auf jeder Plattform zu lösen.