docker stop` と `docker kill` の違いは何ですか?

docker

docker stopdocker killの違いは?

確かに、どちらも実行中のコンテナを停止させます。docker stop はコンテナ内で実行されているプロセスを正しい方法で停止させようとし、docker kill はキルシグナルを送るということでしょうか?もしそうだとしたら、docker stopは実行中のプロセスを正しく停止させる方法をどうやって知っているのでしょうか。(これはプロセスごとに異なるので)

  144  Geert-Jan  2014-05-21


ベストアンサー

docker stop はコンテナ内で実行されているプロセスを正しい方法で停止しようとしますが、docker kill は kill シグナルを送信しますか?

基本的にはい、違いは微妙ですが、コマンドラインの参照で概説します

  • docker stop: 実行中のコンテナを停止する (SIGTERMを送信し、猶予期間後にSIGKILLする) […] コンテナ内のメインプロセスはSIGTERMを受信し、猶予期間後にSIGKILLする。[強調します]
  • docker kill: 実行中のコンテナを kill (send SIGKILL, or specified signal) […] コンテナ内のメインプロセスには SIGKILL, or option -signal で指定された任意のシグナルが送られます。[強調します]

そのため、stopは標準のPOSIXシグナル SIGTERMを送信することでグレースフルシャットダウンを試みますが、killはデフォルトでプロセスを終了させます(ただし、他のシグナルを送信することもできます)

SIGTERM シグナルはプロセスの終了を要求するために送られます。SIGKILL シグナルとは異なり、このシグナルはプロセスがキャッチして解釈したり、無視したりすることができます。これにより、プロセスは適切な場合にはリソースを解放して状態を保存して終了することができます。SIGINT は SIGTERM とほぼ同じであることに注意してください

これは、データの完全性が最重要視される場合 (データベースなど) に考慮すべきことです。より詳細な説明は、例えば Major Hayden の SIGTERM vs. SIGKILL を参照してください

SIGTERMを受信したら、アプリケーションは何をしたいかを決定することができます。ほとんどのアプリケーションはリソースをクリーンアップして停止しますが、そうでないアプリケーションもあります。アプリケーションはSIGTERMを受信したときに全く異なることをするように設定されているかもしれません。また、アプリケーションがディスクI/Oを待っているような悪い状態にある場合、送られてきたシグナルにアクションを起こすことができないかもしれません

137  Steffen Opel  2014-05-22


docker killは、メインエントラントポイント処理/プログラムを突然停止します

docker stopは潔く止めようとします(丁寧にお願いします :P)

どちらの場合も、ファイルシステムの変更は (停止時や kill 時に) 持続されるので、docker start <container> であれば、そこからも継続されます

16  awkwardarts  2017-04-29


そして、先ほど追加した回答に加えて

docker stop の後に docker events を実行するとイベントが表示されます

  • kill (signal 15): ここで、signal 15 = SIGTERM
  • die
  • stop

docker kill の後に docker events を実行するとイベントが表示されます

  • kill (signal 9): ここで、signal 9 = SIGKILL
  • 死ね(コード137終了

docker stopには、プロセスを終了させる前のタイムアウトを指定します。デフォルトは10秒です

この表にはさらに詳細が書かれています

6  faboulaws  2018-11-03


デスクトップのプラグを抜いてコンピュータをシャットダウンするのと似ています

プラグオフを引くことがハードパワーオフを意味するように、docker killはmy_containerを強制終了させる直接的な方法を意味します

コンピュータをシャットダウンするとは、OSにすべてのプロセスをシャットダウンするための信号を送ることを意味し、docker stopは実行中のコンテナにSIGTERMの信号を送り、プロセスを優雅に停止させることを意味します

2  Rajat Badjatya  2019-01-19


タイトルとURLをコピーしました