Wenn ich einen Python-Prozess in einem Container mit starte
docker run --name python python python3 -c "import time; time.sleep(3600)"
Und versuchen Sie dies auf einer anderen Konsole mit zu beenden
docker stop python
Der Dolmetscher wird nicht angehalten. Stattdessen muss Docker den Prozess nach einer Nachfrist abbrechen (standardmäßig 10s).
Ein einfacher
python3 -c "import time; time.sleep(3600)"
in der Kommandozeile kann sofort abgebrochen werden, indem ein TERM an diese gesendet wird.
Was ist der Grund für diese Asymmetrie?
stop
Befehl ein anderes Signal sendet alsTERM
an den Container. Edit: Hast du es versuchtdocker kill python
? (Alternativ SIGTERM senden:docker kill --signal=SIGTERM python
)Antworten:
Die Asymmetrie ist auf UNIX selbst zurückzuführen. Die
man 2 kill
Manpage von Linux sagt:Python installiert standardmäßig keine Handler. Wenn der Python-Interpreter nicht als PID 1 ausgeführt wird, bedeutet dies, dass die Standardaktion ausgeführt wird, die für SIGTERM bedeutet, dass der Prozess abgebrochen wird. Wenn es als PID 1 ausgeführt wird, gibt es keine Standardaktion. Somit passiert nichts.
quelle