[Docker]PostgreSQLのヘルスチェックを実行する際の注意点

システム開発Tips

Dockerコンテナで実行したPostgreSQLに対してヘルスチェックで生存確認を利用する際の注意点

file

上記の様にホスト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エラーログも出ずにヘルスチェックが出来るようになりました。

フォローお願いします!

コメント

タイトルとURLをコピーしました