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

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

この質問は以前にも聞かれたことがあるSOではこちらそしてRedditではこちらしかし、実際の質問には決して答えられません。

shutdownAtlassianのサービスをDockerコンテナ内で実行しています。しかし、次のようなコマンドを実行するとどうなるのか気になります。ザ・ホストコンテナを正常にシャットダウンしようとしますか、それともすぐに強制終了しようとしますか? どうやら、これに関する実際のリソースを見つけることができないようです。おそらく、私が Docker を使い始めたばかりだからでしょう。

次のことを想像してください。

  1. コンテナを実行しています
  2. shutdown電源を切るコマンドを発行しますザ・ホスト それなし明示的に発行するdocker stop

このようなシナリオで docker は何をしますか? 安全にコマンドを発行しshutdown、何よりも先にコンテナが正常にシャットダウンされることが期待できますか?

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

答え1

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

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

私の知る限り、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 秒です。

関連情報