Node.js公式Dockerイメージのうち、Slim版やAlpine版には curl
も wget
も入っていない。
よってコンテナ内からHTTPサーバーの疎通確認・死活監視などを行う際にこれらを使った方法は採用できない。
compose.yaml
services:
service:
# ...
healthcheck:
test: curl -f http://localhost:3000/ # --> 必ず `Unhealthy` になる
interval: 5s
しかしNode.js 18以降(フラグ付きなら17.5以降)では fetch
が使用できるようになったため、これで代替できる。
compose.yaml
services:
service:
# ...
healthcheck:
test: echo "fetch('http://localhost:3000/')" | node
interval: 5s
ポートが複数の場合はforEachで回せる。
echo "[3000,6006].forEach(p => fetch('http://localhost:' + p))" | node
数珠つなぎにすることもできる。
echo "fetch('http://localhost:3000/');fetch('https://example.com/');" | node
自分自身の死活監視やちょっとしたコンテナ間依存関係の構築用であればこれで十分な場合も多いと思われる。