Dockerコンテナで実行したPostgreSQLに対してヘルスチェックで生存確認を利用する際の注意点
上記の様にホストOS上にDB用とAPI用にDockerコンテナを2つ作成する構成でWEB APIを提供することになったけどAPIが稼働する際には必ずDBが活きていて欲しかったので、公式サイトを参照してヘルスチェック(死活監視)を利用することにした。
(以前はDockerizeなどを利用してやっていたみたいですね。)
で、作ったymlはこんな感じ。
service:
db:
environment:
- POSTGRES_USER=pos1
- POSTGRES_PASSWORD=pospos
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
service:
api:
depends_on:
db:
condition: service_healthy
大量のFATALエラーとその解決方法
上記の記述で起動順序自体は上手くいったけど、docker logsでdbコンテナのログを見ると10秒間隔でFATALエラーを吐いているのを発見。(ヘルスチェック自体はできてるみたいなので、仕組み上なんでもよかったり?)
2022-03-23 21:00:00.000 JST [xxx] FATAL: role "root" does not exist
ヘルスチェック入れる前には出力されてなかったので明らかに["CMD-SHELL", "pg_isready"]
やんけーって。
エラー通りpg_isreadyでroot権限でチェック行っとるのでしょうけど、POSTGRES_USER指定したらrootいなくなるのかな?
とりあえず、POSTGRES_USERに指定してるユーザでpg_isready動かせばいけるやろということで公式サイトを見ると、やっぱりpg_isreadyにユーザ指定できる模様でした。
全く公式サイト様様やで。
service:
db:
environment:
- POSTGRES_USER=pos1
- POSTGRES_PASSWORD=pospos
healthcheck:
# test: ["CMD-SHELL", "pg_isready"]
test: ["CMD-SHELL", "pg_isready --username=pos1"]
interval: 10s
timeout: 5s
retries: 5
service:
api:
depends_on:
db; condition: service_healthy
めでたく、FATALエラーログも出ずにヘルスチェックが出来るようになりました。
コメント