Docker内→ホストOS通信パターン
課題
Dockerコンテナ内のサービス(例: Caddy)からホストOS上のプロセスに通信する場合、
単純な localhost や 127.0.0.1 ではアクセスできない。
Docker Bridge ネットワーク経由
確認方法
# Docker bridgeのゲートウェイIP(=ホストIP)を確認
docker network inspect <network_name> | grep Gateway
# → 例: "Gateway": "172.19.0.1"必要な設定チェックリスト
-
アプリのリッスンアドレス
127.0.0.1ではなく0.0.0.0にバインド- 例:
.envでHOST=0.0.0.0
-
ファイアウォール(UFW/iptables)
- Docker サブネットからの通信を許可
ufw allow from 172.19.0.0/16 to any port <PORT> proto tcp
-
アプリのセキュリティ設定
- CORS:
ALLOWED_ORIGINSにドメインを追加 - 認証: 必要に応じてAPI Token設定
- CORS:
テスト手順
# Step 1: ホスト上で直接テスト
curl http://127.0.0.1:<PORT>/
# Step 2: Docker bridge IPでテスト(ホスト上)
curl http://172.19.0.1:<PORT>/
# Step 3: Docker内部からテスト
docker exec <container> wget -qO- --timeout=5 http://172.19.0.1:<PORT>/Step 2が成功してStep 3が失敗する場合 → ファイアウォールが原因。