デーモン停止時のコンテナー継続起動
Docker デーモンが停止すると、デフォルトでは起動中のコンテナーも停止します。 デーモンが利用できなくなっても、コンテナーが起動し続けるように設定することができます。 この機能のことを ライブリストア(live restore)と呼びます。 ライブリストアのオプションを使えば、デーモンの障害時、計画停電時、システム更新時などに伴うコンテナーのダウンタイムを軽減できます。
メモ
ライブリストアは Windows コンテナーに対応していません。 ただし Docker Desktop for Windows 上にて動作する Linux コンテナーには対応しています。
ライブリストア有効化
ライブリストアを有効にする方法は2つあります。 デーモンが利用不能になっても、これによりコンテナーを起動し続けることができます。 ただしこれを行うのは 2つのうちのいずれか1つ としてください。
-
デーモン設定ファイルに設定を加えます。 Linux の場合、設定ファイルのデフォルトは
/etc/docker/daemon.json
です。 また Docker Desktop for Mac あるいは Docker Desktop for Windows の場合は、タスクバー上の Docker アイコンを選び、 Preferences -> Daemon -> Advanced をクリックします。-
以下の JSON 記述を加えて
live-restore
を有効にします。{ "live-restore": true }
-
Docker デーモンを再起動します。 Linux の場合、再起動はせず(いずれのコンテナー停止も避けるために)Docker デーモンのリロードを行うこともできます。
systemd
利用時はsystemctl reload docker
コマンドを実行します。 それ以外の場合はdockerd
プロセスに対してSIGHUP
シグナルを送信します。
-
-
上とは別に、
dockerd
プロセスを手動で起動する際に--live-restore
フラグを与える方法もあります。 ただしこの方法は推奨されません。 この方法によると Docker プロセス起動時に、systemd
や他のプロセスが利用可能な環境を作り出していないからです。 このことが予期しない動作となることがあります。
デーモン更新時のライブリストア
ライブリストアの機能により、Docker デーモンの更新中でもコンテナーを起動し続けることができます。
ただしパッチリリース (YY.MM.x
) のインストール時のみが対象であって、メジャーアップデート (YY.MM
) の場合はサポートされません。
各アップデートのリリースを1度でも取りやめていた場合、デーモンによるコンテナーへの接続が復元できなくなる場合があります。 コンテナーへの接続が復元できなかった場合、起動中のコンテナーを制御できなくなっているので、手動でコンテナーを停止させる必要があります。
再起動時のライブリストア
ライブリストアのオプションによってコンテナーが復元されるのは、デーモンのオプション、たとえばブリッジ 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 マネージャーが管理できる状態になるまで、Swarm サービスを管理することはできません。
docker, upgrade, daemon, dockerd, live-restore, daemonless container