😹

ベースイメージをnode:slimやnode:alpineにしたら、curlを使ったコンテナのヘルスチェックが失敗する

2022/07/15に公開

コンテナのベースイメージを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