本文へスキップ
BecomeCoder

Dockerコース · 第8章 本番運用の作法 · レッスン28

再起動ポリシーとヘルスチェック ― 落ちても自動で復活

ブラウザで完結

導入

本番のサーバーは、コンテナ落ちたり、サーバーが再起動したりしても、勝手に立ち上がってほしいものです。それを実現するのが 再起動ポリシー(--restart。あわせて、「動いてはいるが正常か」を見張る ヘルスチェック の考え方も押さえます。

説明

docker run--restart <ポリシー> を付けると、コンテナが停止したときの振る舞いを決められます。

docker run -d --restart always -p 8080:80 --name web nginx

代表的なポリシーは3つです。

ポリシー意味
no(既定)止まっても何もしない
on-failure異常終了(エラー)したときだけ再起動する
always止まったら常に再起動する(サーバー再起動後も立ち上がる)
unless-stoppedalways に近いが、手動で止めたときは復活させない
flowchart TD
    A["コンテナが停止"] --> B{"--restart は?"}
    B -->|"no"| C["そのまま停止"]
    B -->|"on-failure"| D["エラー終了なら再起動"]
    B -->|"always / unless-stopped"| E["自動で再起動<br/>(サーバー再起動後も)"]

これは Linux コースの systemctl enable(第7章:再起動後も自動起動)と同じ発想です。設定したポリシーは docker inspect で確認できます。

docker inspect web

"RestartPolicy": { "Name": "always" } と記録されていれば、自動復活が有効です。

もう1つ大切なのが ヘルスチェック。コンテナは「プロセスが動いている=正常」とは限りません(応答が固まっていても、プロセスは生きていることがある)。そこで Dockerfile に HEALTHCHECK を書くと、Docker が定期的に「本当に応答するか」を確かめてくれます。

FROM nginx
HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost/ || exit 1
flowchart LR
    A["Docker が定期的に<br/>HEALTHCHECK を実行"] --> B{"応答した?"}
    B -->|"はい"| C["healthy(健全)"]
    B -->|"いいえ"| D["unhealthy(異常)<br/>→ 通知・入れ替えの合図"]

ヘルスチェックを付けると、docker ps の STATUS に (healthy) / (unhealthy) が表示され、「動いてはいるが応答しない」状態を検知できます。Linux コースの curl -I200 OK を確かめる監視(第6章)を、Docker が自動でやってくれるイメージです。

やってみよう

  • docker run -d --restart always -p 8080:80 --name web nginx を実行し、docker inspect web"RestartPolicy"always になっていることを確認しましょう。
  • --restart on-failure に変えて起動し直すと、ポリシーが変わることも見てください。

実際に動かしてみよう

下の端末に docker コマンドを打って Enter を押すと、その場で結果が返ります。本文の手順を実際になぞりながら進めましょう(各レッスンは毎回まっさらな状態から始まり、「最初からやり直す」でいつでも戻せます)。

Docker(シミュレート)

ブラウザ内で docker コマンドを試せる学習用環境を読み込みます(本物のDockerではなく、動きを再現したものです)。
スクロールして表示された時点でも自動で読み込まれます。