docker compose
でリバースプロキシとして Traefik を通して他のコンテナにアクセスすると "404 page not found
" が返ってくるが、しばらくすると表示される。
しかし、リバースプロキシに Nginx を通したり、ターゲットのコンテナのポートを公開して直接アクセスすると即座に正常に表示されます。つまりターゲットのコンテナ自体は動いているのです。
TL; DR (今北産業)
-
Traefik
は、ターゲットとなるコンテナが "HEALTHCHECK
" を有効にしている場合、コンテナのhealth
ステータスがhealthy
にならないとリクエストを転送しない -
docker compose ps
でhealth
ステータスを確認し、health: starting
の間は待たないといけない -
HEALTHCHECK
で--interval=5m
に設定していた場合の例$ # 起動直後の確認 (STATUS が "health: starting" であることに注目) $ docker compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS hello-world-myapp hello-world-myapp "/usr/bin/mywebapp" myapp 26 seconds ago Up 25 seconds (health: starting) 80/tcp hello-world-traefik traefik:latest "/entrypoint.sh --lo…" traefik 26 seconds ago Up 25 seconds 0.0.0.0:9090->80/tcp, :::9090->80/tcp $ curl localhost:9090 404 page not found $ # 5分スリープさせてから確認 (STATUS が "healthy" であることに注目) $ sleep 5m; docker compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS hello-world-myapp hello-world-myapp "/usr/bin/mywebapp" myapp 8 minutes ago Up 8 minutes (healthy) 80/tcp hello-world-traefik traefik:latest "/entrypoint.sh --lo…" traefik 8 minutes ago Up 8 minutes 0.0.0.0:9090->80/tcp, :::9090->80/tcp $ curl localhost:9090 Hello from host: 76c1251bd910
動作環境
- macOS v12.6.3 (Monterey)
- Docker v20.10.23 (Desktop v4.17.0)
- Docker Compose v2.15.1
- Alpine Linux v3.17.3
- Docker v20.10.24
- Docker Compose v2.15.1