😹
ベースイメージをnode:slimやnode:alpineにしたら、curlを使ったコンテナのヘルスチェックが失敗する
コンテナのベースイメージをnode:slim系やnode:alpine系にしたところ、コンテナのcurlを使ったヘルスチェックが失敗するようになりました。原因が分かってしまえば簡単なことだったんですが、調査に少し時間がかかったので、原因と解決方法を残しておきます。
状況
- Node.jsアプリケーションをECS on Fargateでホスティング
- コンテナにはcurlを使ったヘルスチェックを設定
- ECSの前段にはALBを配置
- コンテナのベースイメージをnode:<version>系からnode:slim系やnode:alpine系に変更したところ、コンテナのヘルスチェックが通らなくなった
- ALBからECSタスクへのヘルスチェックは通っていた
- ヘルスチェック用エンドポイントに関するログを確認したところ...
- ALBからのヘルスチェックのログはあった
- コンテナのローカルホストからのヘルスチェックのログはなかった
原因
node:slim系やnode:alpine系ではcurlが入っていないことが原因でした。
コンテナのヘルスチェックをcurlを用いてしていたんですが、node:slim系やnode:alpine系にはデフォルトではcurlが入っていません。curlが見つからず、ヘルスチェックが必ず失敗していました。
解決方法
node:slim系やnode:alpine系にもデフォルトで入ってるwgetを使ってヘルスチェックします。
wget --no-verbose --tries=1 --spider {ヘルスチェック用エンドポイント} || exit 1
もしくは、Dockerfileにcurlをインストールするステップを追加することでも解決するかと思います。
Discussion