2016-06-11 10 views
2

ich ein Problem habe hier mit Ubuntu 14.04Prevent Docker-Motor Neustart während apt-get upgrade

Immer, wenn ich einem apt-get tun aktualisieren, wenn Docker-Motor für Upgrade berechtigt ist, den Dienst neu gestartet, nachdem Aktualisierung. Dadurch werden die Container neu gestartet.

Einer der Container ist einer, der beim Start manuell eingreifen muss, andere sammeln zeitkritische Daten, so dass ein Neustart der Container nur zu bestimmten Zeiten gewünscht ist.

Wie kann ich den Docker-Engine-Dienst von diesen automatischen Neustarts ausschließen?

AFAIK, Mongodb, zum Beispiel, startet Mongod nicht nach einem Apt-Get-Upgrade, warum kann Docker nicht auf die gleiche Weise verhalten?

Antwort

3

Ich bin nicht ganz sicher, was mongodb tut, aber ich bin mir ziemlich sicher, dass es sich beim Update neu startet.

Das Problem mit Docker-Motor ist nicht, dass sie sich nicht neu starten, tut es tatsächlich, die Sie, indem Sie den folgenden Befehl nach dem Update überprüfen können:

sudo service docker status 

Es ist nur so, dass es nicht der Fall ist Starten Sie die laufenden Container neu. Ich weiß nicht genau, warum es so sein muss, denn es könnte theoretisch die laufenden Container zurückbringen, wenn der Dienst neu gestartet wird, aber aus welchen Gründen auch immer, es tut es nicht.

Es gibt zwei Möglichkeiten, dieses Problem zu umgehen.

Die erste und einfache Möglichkeit, das Update von Docker-Engine auszuschließen und das Update manuell durchzuführen, wenn Sie sehen, dass es verfügbar ist.

sudo apt-mark hold docker-engine 
sudo apt-get upgrade 

Sie sollten eine Mitteilung sehen, ob es ein Update war und ob das Update gehalten wurde zurück

... 
The following packages were kept back: 
docker-engine 
... 

Wenn Sie Container haben, die Sie nicht beim Upgrade neu starten kann es sich leisten, sollten Sie diesen Weg gehen.

Wenn Sie es sich jedoch leisten können, sie neu starten zu lassen, können Sie den zweiten Ansatz verwenden. Sie können Neustart Richtlinien festlegen, wenn Sie die Behälter beginnen, etwa so:

sudo docker run --restart=always -d image-name 

diese Weise, wenn Docker-Motor neu gestartet wird, wird der Behälter mit ihm begonnen. Das bedeutet, dass der Container, der auf diese Weise gestartet wurde, automatisch gestartet wird.

+0

Ah, ok, ich habe das Problem nicht neu gestartet, weil ich dann alles vor einem Upgrade manuell heruntergefahren habe und dann einen Neustart durchgeführt habe, der ein Skript ausführt, das alle Container startet. Ich denke, es ist die 'sudo apt-mark docker-machine hold', die ich möchte. Ist es Docker-Maschine oder Docker-Engine? –

+0

@DanielF Es ist Docker-Engine, korrigiert es. – khattam

1

Das ist ein Design der vor/nach der Installation Skripte, die in das Deb-Paket kommen und eine Entscheidung, wer auch immer das Paket baut (obwohl auseinanderziehen der neueste jessie auf apt.dockerproject.org bauen, sehe ich nicht den Halt innerhalb ihrer Kontrolldateien, nur das Register und starten).

Der beste Vorschlag, den ich machen kann, ist, das System-Upgrade nicht auszuführen, wenn Sie keine Ausfallzeiten tolerieren können. Minimieren Sie die Zeit für das Upgrade, indem Sie zuvor nur einen Download durchführen (apt-get upgrade -d) und dann das Upgrade während des Ausfallfensters starten. Sie können das docker-engine-Paket auch in die Warteschleife legen, damit es nicht automatisch mit dselect aktualisiert wird und Sie = für den Paketnamen drücken.