了解しました。それでは以下に、

🔖 第9章:トラブルシューティングとFAQ より

9.4 Dockerネットワークの罠(hostとbridgeの違い)

を、初心者にもわかりやすく図とたとえを交えて解説します。


🔖 9.4 Dockerネットワークの罠(hostとbridgeの違い)


✅ 要点まとめ


📘 基本のネットワークモード2つ

モード 説明 特徴
bridge Dockerのデフォルト。仮想ネットワークを作成し、NAT越しに通信する 各コンテナに独立したIPアドレス(172.17.x.xなど)が振られる
host コンテナがホストと同じネットワーク空間を共有する ポートマッピング不要。localhost で直接接続できる(Linuxのみ)

📊 イメージ図で理解

[bridgeモード](標準的なDockerネットワーク)

[Host OS]
   |
[Docker Engine]
   |
[Virtual Network: 172.17.0.0/16] ──────┬────────────┬────────────┐
    |                                 |            |            |
[appコンテナ:172.17.0.2]        [auth:172.17.0.3] [nginx:172.17.0.4]

- コンテナ間は名前またはIPで通信(e.g., <http://auth:3000>)
- ホストからアクセスするには port expose(e.g., -p 3000:3000) が必要

[hostモード](開発や調査などで稀に使う)

[Host OS Network]
   └─ コンテナがそのままホストのネットワークに乗る

- コンテナのlocalhostがホストと同じ → ポートマッピング不要
- セキュリティ・名前解決・分離性が低くなる


🔍 よくあるトラブルと回避策

現象 原因 対応
localhost:3000 がつながらない bridge モードでポートマッピングしてない ports: セクションを確認。3000:3000 など
appからauthが http://localhost:3000 にアクセスしてるが動かない 各コンテナ内の localhost自分自身 http://auth:3000 のように サービス名で指定する
devcontainerとappが別ネットワークで通信できない devcontainerはbridgeだがappがcustom network使用 docker network connect で同じネットワークに所属させる
hostモードでセキュリティが気になる ホストと同一のネットワークを使うため、ポートが外部に開く 通常はbridgeで十分。hostは開発専用と割り切る