回答:
docker killはコンテナー内で実行されるプロセスを正しい方法で停止しようとしますが、docker killはkillシグナルを送信しますか?
基本的には違います。違いはわずかですが、コマンドラインリファレンスで概説されています。
だから、stop
標準送信することにより、正常なシャットダウンをトリガしようとPOSIX信号を SIGTERM
一方、kill
単にデフォルトでプロセスを殺す(だけでなく、他の信号を送信することができます):
SIGTERMシグナルは、プロセスの終了を要求するためにプロセスに送信されます。SIGKILLシグナルとは異なり、プロセスによってキャッチおよび解釈または無視されます。これにより、プロセスは適切な終了を実行してリソースを解放し、必要に応じて状態を保存できます。SIGINTはSIGTERMとほぼ同じであることに注意してください。
とにかく強制されるわけではありませんが、プロセスは通常、SIGTERM
適切に処理され、その責任に応じて正しいことを行うことが期待されます-これは、猶予期間よりも長い猶予シャットダウン試行のために簡単に失敗する可能性がありますパラマウント(例:データベース用); より詳細な説明については、例えばヘイデン少佐のSIGTERM対SIGKILLを参照してください。
SIGTERMを受信すると、アプリケーションは何をしたいかを決定できます。ほとんどのアプリケーションはリソースをクリーンアップして停止しますが、停止しないアプリケーションもあります。SIGTERMを受信すると、まったく異なる処理を行うようにアプリケーションを構成できます。また、ディスクI / Oの待機など、アプリケーションの状態が悪い場合、送信された信号に基づいて動作できない場合があります。
docker kill
シャットダウン中に時間を節約するために手動で使用する理由を理解していますが、スクリプトでは、経由で正常なシャットダウンを試みる方が常に良いとは思わないでしょうdocker stop
か?docker kill
ただし、スクリプトにはまだ多くのが表示されています。
docker kill
メインエントリポイントプロセス/プログラムを突然停止します
docker stop
それを優雅に停止しようとします(丁寧に尋ねます:P)
どちらの場合も、ファイルシステムの変更は(停止または強制終了の時点で)保持されるため、その場合docker start <container>
はそこから続行します。
docker kill
、メインプロセスがまだメモリに保持していた保留中のファイルシステムの変更が失われると、ファイルシステムが破損する可能性がありますか?
docker kill
、プロセスを強制終了することに似ています。
デスクトップからプラグを抜いてコンピューターをシャットダウンするのに似ています
プラグdocker kill
を抜くということは、ハード電源を切ることを意味し、my_containerを強制終了する直接的な方法を意味します。これは、最初にプロセスを正常にシャットダウンしようとはしません。
コンピューターをシャットダウンすることは、すべてのプロセスをシャットダウンするためにOSにシグナルを送信することをdocker stop
意味しSIGTERM
、プロセスを正常に停止するために実行中のコンテナーにシグナルを送信することを意味します。