コンテナは Up なのにブラウザや curl が繋がらない——ポート公開の取り違え、アプリの待ち受けアドレス、ホスト側ファイアウォールが定番どころ。内側では動いているのに外側だけ届かない、を順に潰す。
先に結論
-p ホスト:コンテナ の向きと番号を取り違えていないか確認
- アプリが
127.0.0.1 だけ待ち受けしていないか(コンテナ外から届かない)
- 先に
docker exec でコンテナ内 localhost 疎通→ホストから疎通、の順で切り分ける
- Compose のサービス名通信とホスト公開は別物。混同しやすい
切り分け手順
docker ps の PORTS 列で本当に publish されているか見る
- コンテナ内でアプリの待ち受けポートに疎通できるか確認
- ホストから
localhost:公開ポート へ疎通
- 別マシンから届かないならホスト FW/クラウド SG/WSL の罠を疑う
- IPv6 だけ見ている/IPv4 だけ見ているズレにも注意
よくある原因
-p 8080:80 とアプリ待ち受け 8080 の取り違え
- EXPOSE だけ書いて publish していない(EXPOSE は文書化に近い)
- アプリが 127.0.0.1 バインド(0.0.0.0 が必要なことが多い)
- 別ネットワーク/別 Compose プロジェクトで繋がっていない
- 既にホスト側ポートが使用中で別ポートにズレた
対処のポイント
- バインドアドレスを 0.0.0.0(または明示の外部向け)に直す
- publish 設定をログ/compose で再確認し、番号を揃える
- 開発機なら一度
curl の経路(コンテナ内→ホスト→外部)をメモに残すと再発時が速い
ざっくりまとめ
- 内側疎通と外側疎通を分けて見る
- publish 向き・待ち受けアドレス・FW が三大原因
- EXPOSE だけでは外に開かない
関連記事