
Genau diese Frage wurde schon einmal gestellthier auf SOUndhier auf Reddit. Die eigentliche Frage wird jedoch nie beantwortet.
Ich habe unsere Atlassian-Dienste in Docker-Containern laufen. Ich frage mich jedoch, was passiert, wenn ich einen shutdown
Befehl ausführe ander Gastgeber. Versucht es, die Container ordnungsgemäß herunterzufahren, oder versucht es, sie sofort zu beenden? Irgendwie scheine ich keine tatsächlichen Ressourcen dafür zu finden, vielleicht weil ich noch relativ neu bei Docker bin.
Stellen Sie sich Folgendes vor:
- Ich habe laufende Container
- Ich gebe den
shutdown
Befehl zum Ausschaltender Gastgeber ohneausdrückliche Ausgabedocker stop
Was macht Docker in einem solchen Szenario? Kann ich den shutdown
Befehl sicher ausgeben und erwarten, dass meine Container vor allem anderen ordnungsgemäß heruntergefahren werden?
In meinem Fall verwende ich eine Ubuntu Server 19.04-Instanz, falls das wichtig ist, aber die Frage bezieht sich auf ein allgemeineres Szenario bzw. deckt die wichtigsten Distributionen ab.
Antwort1
Ihre Container sollten wie alle anderen Prozesse im System ein SIGTERM erhalten.
Der Haken dabei ist, dass das SIGTERM vom Hauptprozess im Container (der von ENTRYPOINT gestartete) empfangen wird. Wenn der Container ein Skript zum Starten einer Binärdatei ausführt, ist es für exec
die Binärdatei wichtig, dass sie zum Containerprozess wird. Andernfalls wird das SIGTERM vom Shell-Interpreter empfangen, der es normalerweise nicht an das untergeordnete Element weiterleitet.
Soweit ich docker stop
weiß, versucht es zuerst mit einem SIGTERM auf dem Container und erwartet, dass er innerhalb von 10 Sekunden beendet wird. Andernfalls sendet es ein SIGKILL. Wenn Ihr Container also schnell anhält, docker stop
sollte alles in Ordnung sein.
Antwort2
Es gibt einen theoretischen Ansatz (von @xenoid) und einen praktischen.
Führen Sie den Server-Shutdown durch und beobachten Sie, was passiert.
Die Konsole.Obwohl das Netzwerk sofort unterbrochen werden könnte, kann der Shutdown-Vorgang dennoch einige Zeit in Anspruch nehmen. Beobachten Sie auf der Konsole (einige Hosting-Anbieter bieten eine virtuelle Konsole an), wie es abläuft – wie lange dauert der Shutdown-Vorgang tatsächlich und was passiert in der Zwischenzeit?
Die Protokolle.Soweit ich das gesehen habe, ist der Datenbankcontainer oft der Grund für die Sorge. Wird er getötet oder ordnungsgemäß beendet? Die Wahrheit steht in den Protokollen. Beobachten Sie sie sorgfältig. Wenn Sie das System hochfahren und diese Protokolle mit den Zeitstempeln für das Herunterfahren sehen, sind Sie ziemlich gut aufgestellt:
.
2023-08-11 14:43:21 0 [Note] InnoDB: Starting shutdown...
[...]
2023-08-11 14:43:21 0 [Note] mariadbd: Shutdown complete
- Konfiguration des Zeitpunkts für das Herunterfahren.Sie können auch genauer untersuchen, wie Sie die Parameter für die Neustartzeit ändern können. Lesen
man systemd-system.conf
und überprüfen Sie diesen Absatz:DefaultTimeoutStartSec=, DefaultTimeoutStopSec=, DefaultTimeoutAbortSec=, DefaultRestartSec=
. Der Standardwert beträgt 90 Sekunden.