デーモンが停止中でも、コンテナの実行を維持¶
デフォルトでは、 Docker デーモンを終了(terminate)すると、実行中のコンテナを停止(shut down)します。デーモンが利用できない場合に、コンテナを実行し続けるかどうかのオプションを設定できます。この機能をライブ・リストア( live restore )と呼びます。リストアのオプションがあれば、デーモンのクラッシュ発生や、計画的な停止、アップグレード時にダウンタイムを短縮するのに役立ちます。
注釈
ライブ・リストアは Windows コンテナをサポートしていません。しかし、Docker Desktop for Windows 上で実行している Linux コンテナには動作します。
ライブ・リストアの有効化¶
デーモンが利用できなくなった場合、コンテナを残し続けるようにライブ・リストアを有効化にするには、2つの方法があります。 以下にある、いずれか1つのみ行ってください 。
デーモンの設定ファイル上で、設定を追加します。 Linux 上であれば、デフォルトは
/etc/docker/daemon.json
です。Docker Desktop for Windows や Docker Desktop for Mac であれば、タスクバーの Docker アイコンから、 Preferences -> Daemon -> Advanced をクリックします。以下の JSON を使うと
live-restore
を有効化します。
{ "live-restore": true }
Docker daemon を再起動します。 Linux 上であれば、Docker デーモンを再読込することで、再起動を防止できます(そして、コンテナに対する停止期間も防止)。
systemd
を使っている場合は、systemctl restart docker
コマンドを使います。あるいは、dockerd
プロセスに対してSIGHUP
シグナルを送信します。
あるいは別の方法として、
dockerd
プロセスを手動で起動し、--live-restore
フラグを付けても可能です。しかし、この方法は推奨しません。セットアップ環境にあるsystemd
や他のプロセス・マネージャが Docker プロセスを開始してしまう可能性があるためです。その結果、予期しない挙動になる可能性があります。
アップグレード中のライブ・リストア¶
ライブ・リストアは、 Docker デーモンを更新中でもコンテナを実行したままにします。しかし、サポートしているのはパッチ・リリース( 年.月.x
の形式 )のバージョンに対してのみであり、メジャー( 年.月
の形式 )バージョンには対応していません。
リリースを越えてアップグレードを試みると、デーモンはコンテナとの通信が修復(リストア)できない可能性があります。もしもデーモンが接続を修復できなければ、実行中のコンテナは管理できなくなり、手動でコンテナを停止する必要になります。
再起動時のライブ・リストア¶
ライブ・リストアのオプション設定が機能するのは、デーモンのコンテナに対するオプション指定のみです。ブリッジ IP アドレスと、グラフ・ドライバは変更しません。デーモン・レベルの設定オプションを変更するのであれば、ライブ・リストアは動作せず、手動でコンテナを停止する必要が出てきます。
実行中のコンテナに対するライブ・リストアの影響¶
長期間にわたりデーモンが停止すると、実行中のコンテナでは、デーモンが通常読み込む FIFO ログが溢れてしまう可能性があります。コンテナからのロギングや他データなど、全てのログをブロックします。デフォルトのバッファ・サイズは 64K です。バッファが溢れると、これらをフラッシュするには Docker デーモンの再起動が必要になります。
Linux 上では、このカーネルのバッファ・サイズを /proc/sys/fs/pipe-max-size
で変更できます。しかし、Docker Desktop for mac や Docker Desktop for Windows では、このバッファ・サイズを変更できません。
ライブ・リストアと swarm モード¶
ライブ・リストアオプションが有効になるのは、スタンドアロンのコンテナに対してであり、 swarm サービスでは利用できません。 Swarm サービスは swarm マネージャによって管理されます。swarm マネージャが利用できなくなれば、 swarm サービスはワーカ・ノード上で実行し続けようとしますが、クォーラムを維持するために利用可能な swarm マネージャが十分でなければ、サービスの実行は維持できません。
参考
- Keep containers alive during daemon downtime