Dockerで異常を検知したコンテナを回復するイメージを使用してみる
はじめに
Docker
でコンテナが Exited
などになった際に自動で回復する機能がほしいなと思ったので、調べたら willfarrell/autoheal
という素晴らしいイメージがあるとのことなので試してみる。
まずは、Dockerの機能である HEALTH CHECK
の機能を使用して動作を見た後に、自動回復の willfarrell/autoheal
イメージを追加して動作を確認してみる。
環境
|
|
DockerのHealthCheck機能を試す
compose.ymlの作成
まずは、下記の compose.yml
を作成してビルド+起動をする。
|
|
※これは、簡単に説明すると localhost:8080
を curl
してHTTPのステータスコードが失敗になる (404, 503など)と unhealty
になるようになっている。
ステータス:healthyの確認
さて、これをビルドした後に起動すると、下記のように healthy
という ステータスが追加される。
|
|
画面は下記のようになっている。
ステータス:unhealthyの確認
この状態で、nginx
のコンテナに入り、 php-fpm
系のプロセスを killしてみる。
そうすると、下記のように エラーページになる。
curl
を叩くとこんな感じ
|
|
そして、 docker compose ps
でコンテナの状態を調べてみると下記のようになっている。unhealth
となっているのがわかるだろうか。
|
|
自動で回復するようにしたい!
ここからが本題となるが、 docker
のヘルスチェック機能はあくまで死活監視をするのみなので、自動回復の機能はない。
そのため、自動回復ができるようになるイメージを compose.yml
に追加する。
willfarrell/autohealを使う
自動回復できるように下記のように compose.yml
を修正する。
|
|
https://hub.docker.com/r/willfarrell/autoheal
compose.yml
を変更したらビルドをし直し、起動する。
自動回復のチェック
先程と同様の手順で復帰するかどうかを見てみる。
nginx
のコンテナに入り、 php-fpm
系のプロセスを killしてみる。
|
|
kill
をすると当然 502
になりエラーページになるが、数秒するとautoheal
のコンテナにより回復する。
実施した際の gif
を用意したので下記で確認をしてみてほしい。
このイメージを使用することで 自動回復ができることがわかった。
公式での自動回復が提供されるまでの代替手段となっているようだが、いつ公式にサポートされるのかもウォッチしていきたい。
Monitor and restart unhealthy docker containers. This functionality was proposed to be included with the addition of HEALTHCHECK, however didn’t make the cut. This container is a stand-in till there is native support for –exit-on-unhealthy https://github.com/docker/docker/pull/22719.
https://hub.docker.com/r/willfarrell/autoheal より引用
参考
- DockerのHEALTHCHECKの動きを理解する
https://qiita.com/knjname/items/9c0a89af2d9e49749017 - wukkfarrell/autoheal
https://hub.docker.com/r/willfarrell/autoheal - Auto-Restart Unhealthy Containers
https://sdr-enthusiasts.gitbook.io/ads-b/useful-extras/auto-restart-unhealthy-containers - Configuring HealthCheck in docker-compose
https://medium.com/@saklani1408/configuring-healthcheck-in-docker-compose-3fa6439ee280
おわりに
Dockerで自動回復してほしいなという場面がたまーにあるので、このあたりの勉強をしてみた。
このあたり細かい知識もほしいなと思う所存。