私はコマンドdocker stop ContainerID
およびdocker pause ContainerID
。 このページ によると、両方とも既存のDockerコンテナを一時停止するために使用されます。
docker pause
コマンドは、指定されたコンテナー内のすべてのプロセスを中断します。 Linuxでは、これはcgroupsフリーザーを使用します。従来、プロセスを中断するときは、SIGSTOPシグナルが使用されます。これは、中断されているプロセスによって確認できます。
https://docs.docker.com/engine/reference/commandline/pause/
docker stop
コマンド。コンテナ内のメインプロセスはSIGTERMを受け取り、猶予期間後はSIGKILLを受け取ります。
https://docs.docker.com/engine/reference/commandline/stop/#options
SIGTERM
は終了信号です。デフォルトの動作ではプロセスを終了しますが、キャッチまたは無視することもできます。その意図は、プロセスを正常に終了するかどうかにかかわらず、最初にクリーンアップの機会を許可することです。
SIGKILL
はキルシグナルです。唯一の動作は、プロセスを即座に強制終了することです。プロセスはシグナルをキャッチできないため、クリーンアップできないため、これは最終手段のシグナルです。
SIGSTOP
は一時停止信号です。唯一の動作は、プロセスを一時停止することです。シグナルをキャッチまたは無視することはできません。シェルは一時停止(およびSIGCONTを介して再開する)を使用して、ジョブ制御を実装します。
docker pause
一時停止(つまり、SIGSTOP
を送信)は、コンテナ内のすべてのプロセスを一時停止(読み取り:一時停止)します。
docker stop
は、conrainer [s]のメインプロセスに停止します(つまり、SIGTERM
を送信し、必要に応じてSIGKILL
を送信します)。
そして、以前に追加された回答への追加
ランニング docker events
後docker stop
はイベントを表示します
ランニング docker events
後docker pause
は1つのイベントのみを表示します
また、docker pause
は、コンテナが一時停止している間もメモリ部分を保持します>このメモリは、コンテナが再開されるときに使用されます。 docker stop
コンテナの停止後に使用されたメモリを解放します。
この表 にはさらに詳細があります。
Docker pauseコマンドで実行中のコンテナーが発行されると、SIGSTOPシグナルが渡され、コンテナー内のプロセス(基本的にはコンテナー自体)が一時停止状態になります。したがって、docker unpauseが発行されると、SIGCONTシグナルがコンテナプロセスに渡され、コンテナプロセスが復元されます。
Docker stopコマンドが実行中のコンテナに発行されると、SIGTERMシグナルがコンテナプロセスに渡され、コンテナを停止および停止します。
そのため、コンテナにdocker pauseが発行され、dockerサービスが再起動されると、それに割り当てられたcgroupが解放されます。 (SIGTERMはすべてのコンテナプロセスに渡されるため)再起動後、コンテナが停止するため、一時停止を解除しても役に立ちません。