web-dev-qa-db-ja.com

ドッカーの一時停止と停止

私はコマンドdocker stop ContainerIDおよびdocker pause ContainerIDこのページ によると、両方とも既存のDockerコンテナを一時停止するために使用されます。

7
ibodi

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を介して再開する)を使用して、ジョブ制御を実装します。

12
Hemant Singh

docker pause一時停止(つまり、SIGSTOPを送信)は、コンテナ内のすべてのプロセスを一時停止(読み取り:一時停止)します。

docker stopは、conrainer [s]のメインプロセスに停止します(つまり、SIGTERMを送信し、必要に応じてSIGKILLを送信します)。

2
Mureinik

そして、以前に追加された回答への追加

ランニング docker eventsdocker stopはイベントを表示します

  • kill(シグナル15):シグナル15 = SIGTERM
  • 死ぬ
  • やめる

ランニング docker eventsdocker pauseは1つのイベントのみを表示します

  • 一時停止

また、docker pauseは、コンテナが一時停止している間もメモリ部分を保持します>このメモリは、コンテナが再開されるときに使用されます。 docker stopコンテナの停止後に使用されたメモリを解放します。

この表 にはさらに詳細があります。

2
faboulaws

Docker pauseコマンドで実行中のコンテナーが発行されると、SIGSTOPシグナルが渡され、コンテナー内のプロセス(基本的にはコンテナー自体)が一時停止状態になります。したがって、docker unpauseが発行されると、SIGCONTシグナルがコンテナプロセスに渡され、コンテナプロセスが復元されます。

Docker stopコマンドが実行中のコンテナに発行されると、SIGTERMシグナルがコンテナプロセスに渡され、コンテナを停止および停止します。

そのため、コンテナにdocker pauseが発行され、dockerサービスが再起動されると、それに割り当てられたcgroupが解放されます。 (SIGTERMはすべてのコンテナプロセスに渡されるため)再起動後、コンテナが停止するため、一時停止を解除しても役に立ちません。

0
Dr.Mr.Dr