Dockerはシステムシャットダウンをどのように処理しますか?

Dockerはシステムシャットダウンをどのように処理しますか?

この正確な質問は以前に要求されました。それはここです。そしてレディットから。しかし、実際の質問に対する答えはありません。

私のAtlasianサービスはDockerコンテナ内で実行されます。しかし、shutdownコマンドを実行するとどうなるか知りたいです。所有者。コンテナを正常に終了しようとしていますか、それともすぐに終了しようとしていますか?とにかく、私はこれに関する実際のリソースを見つけることができないようです。それはおそらく私が最初にdockerに触れたからです。

次の状況を想像してください。

  1. コンテナを実行しています。
  2. shutdown終了コマンドを発行します。所有者 いいえ明示的に公開docker stop

このシナリオでは、Dockerは何をしますか?安全にshutdownコマンドを実行し、他のタスクを実行する前にコンテナが正常に終了することを期待できますか?

私の場合は、Ubuntu Server 19.04インスタンスを使用していますが、問題はより一般的なシナリオ/主要ディストリビューションです。

答え1

コンテナは、システムの他のすべてのプロセスと同様にSIGTERMを受け取る必要があります。

問題は、SIGTERMを取得することがコンテナの基本プロセス(ENTRYPOINTによって開始されたプロセス)であることです。コンテナがバイナリを起動するためにスクリプトを実行している場合は、execバイナリがコンテナプロセスになることが重要です。そうでなければ、シェルインタプリタはSIGTERMを受け取ります。これは通常、子プロセスに渡されません。

AFAIKはdocker stopまずコンテナでSIGTERMを試してから10秒で終了することを期待しています。それ以外の場合はSIGKILLを送信します。したがって、コンテナが急速に停止した場合はdocker stop問題ありません。

答え2

理論的アプローチ(@xenoidを使用)と実際のアプローチがあります。

サーバーのシャットダウンコマンドを実行し、何が起こっているのかを見てください。

  1. コンソール。ネットワークはすぐにブロックされる可能性がありますが、シャットダウンプロセスにはかなりの時間がかかります。コンソール(一部のホスティングプロバイダは仮想コンソールを提供します)で状況を観察するにはどうですか?終了シーケンスには実際にどれくらいの時間がかかり、その間に何が起こりますか?

  2. 丸太。私が聞いたところによると、データベースコンテナはしばしば懸念の対象となります。終了しますか、それとも正常に終了しますか?真実はログにあります。注意深く観察してください。システムを起動してシャットダウンタイムスタンプを含む次のログを確認すると、正常に動作しています。

2023-08-11 14:43:21 0 [Note] InnoDB: Starting shutdown...
[...]
2023-08-11 14:43:21 0 [Note] mariadbd: Shutdown complete
  1. 終了タイミングの設定。再起動タイミングパラメータを変更する方法をさらに調査することもできます。man systemd-system.conf次の段落を参照して確認してくださいDefaultTimeoutStartSec=, DefaultTimeoutStopSec=, DefaultTimeoutAbortSec=, DefaultRestartSec=。デフォルト値は90秒です。

関連情報