mcpField
D
docker-networking

docker-networking

github.com/full-stack-skillsクラウド・DevOps3115 回インストール4 週間前に更新
リポジトリ

docker-networking について

Docker ネットワークの設定とトラブルシューティングを案内するスキルです。コンテナ通信やポート公開を扱う開発者向けに、モードの比較、手順、コマンド、よくある問題をまとめています。

主な機能

  1. 01bridge、host、overlay、none の各モード
  2. 02カスタム bridge ネットワークと DNS
  3. 03ポート公開の指針
  4. 04Swarm overlay の設定
  5. 05接続確認用コマンド
  6. 06ネットワークのセキュリティ上の注意

活用シーン

  1. 01コンテナ用のネットワークモード選択
  2. 02コンテナ間の名前ベース通信を有効化
  3. 03コンテナのポートをホストに公開
  4. 04コンテナの DNS や接続障害を診断

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/full-stack-skills/docker-skills --skill docker-networking

インストール後、Claude Code で/docker-networkingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
examples/
01-web-db-network.md
02-custom-network.md
references/
01-network-modes.md
02-port-mapping.md
03-network-troubleshooting.md

詳細

Docker Networking — ネットワーク設定とコンテナー間通信

Docker のネットワークモード、設定、トラブルシューティングに関する包括的なガイダンスです。

使用する場面

ユーザーが次の内容に言及した場合は、必ずこのスキルを使用してください。

  • 「docker network」、「コンテナーのネットワーク」
  • 「bridge network」、「host network」、「overlay network」
  • 「ポートマッピング」、「ポートの公開」
  • 「コンテナー間の通信方法」、「コンテナー間通信」
  • 「ネットワークに接続できない」、「ネットワークのトラブルシューティング」

ネットワークモードの比較

モード分離用途ホスト間通信?
bridge(デフォルト)コンテナーレベル単一ホスト上のコンテナー❌
hostなし(ホストを共有)最高のパフォーマンス、分離なし❌
overlayコンテナーレベルSwarm による複数ホスト構成✅
none完全ネットワークが不要な場合❌
macvlan/ipvlanMAC/IP レベル物理 IP を必要とするレガシーアプリ✅

カスタム bridge ネットワーク(推奨)

# Create a custom network
docker network create --driver bridge mynet

# Run containers on it
docker run -d --name app1 --network mynet nginx:alpine
docker run -d --name app2 --network mynet nginx:alpine

# DNS resolution works automatically
docker exec app1 ping app2    # ✅ responds
docker exec app1 nslookup app2  # ✅ resolves

# Benefits over default bridge:
# - Automatic DNS resolution
# - Container isolation from default bridge
# - Can connect/disconnect at runtime

ポートの公開

# Basic port mapping
docker run -p 8080:80 nginx     # host:8080 → container:80
docker run -p 8080              # random host port → container:8080
docker run -P nginx             # publish all EXPOSE'd ports to random host ports

# Multiple ports
docker run -p 8080:80 -p 8443:443 nginx

# Bind to specific interface
docker run -p 127.0.0.1:8080:80 nginx  # only localhost

サービスディスカバリー

Custom bridge network provides automatic DNS:

┌──────────────────────────────────┐
│  my-network (bridge)             │
│                                  │
│  ┌──────┐  ┌──────┐  ┌──────┐   │
│  │ app1 │  │ app2 │  │  db  │   │
│  └──┬───┘  └──┬───┘  └──┬───┘   │
│     │         │         │        │
│     └─── DNS: app2 → 172.18.0.3 │
│          DNS: db → 172.18.0.4   │
└──────────────────────────────────┘

app1 can connect to db:5432 directly — no IP needed!

overlay ネットワーク(Swarm)

# Create overlay for multi-host
docker network create --driver overlay --attachable my-overlay

# In compose:
networks:
  backend:
    driver: overlay

ネットワークのトラブルシューティング

# Inspect network details
docker network inspect mynet

# Test connectivity from container
docker exec app1 ping -c 3 app2
docker exec app1 nslookup db
docker exec app1 curl http://app2:8080/health

# Check iptables (host)
sudo iptables -t nat -L DOCKER -n

ワークフロー — 推奨設定手順

ステップ 1:要件を確認する:コンテナー間通信が必要か、ポートを公開するか、ホスト間通信が必要かを確認し、ネットワークモードを選択します
ステップ 2:ネットワークを作成する:docker network create --driver bridge mynet
ステップ 3:コンテナーを起動する:docker run -d --network mynet --name db mysql + docker run -d --network mynet --name api myapp
ステップ 4:接続を確認する:docker exec api ping db(サービス名による DNS 解決)
ステップ 5:問題を調査する:docker network inspect mynet → docker exec api nslookup db

注意点 — よくある落とし穴

  • デフォルトの bridge では DNS が機能しません:デフォルトの bridge 上にあるコンテナーは、名前で互いを解決できません。→ 対処法:docker network create mynet && docker run --network mynet ... を実行し、常にカスタム bridge ネットワークを使用してください。
  • ポートがすでに使用されています:ホストのポート 8080 が使用中の場合、-p 8080:80 は失敗します。→ 対処法:lsof -i :8080 でプロセスを確認します。-p 8081:80 を使用するか、ランダムなホストポートを割り当てるには -p 80 を使用してください。
  • Mac ホストのネットワーク制限:Docker Desktop(Mac)での --network host は、Mac ではなく VM のネットワークに接続します。→ 対処法:--network host の代わりに -p でポートを公開してください。
  • Swarm なしでの overlay:overlay ネットワークは Swarm モードでのみ機能します。→ 対処法:最初に docker swarm init を実行するか、スタンドアロンコンテナーでは --attachable フラグを追加してください。
  • EXPOSE ではポートは公開されません:Dockerfile の EXPOSE はドキュメントとしての指定にすぎません。→ 対処法:ポートに実際にアクセスできるようにするには、必ず -p または Compose の ports: を使用してください。

対応範囲 — 適用できる場面とできない場面

分類場面説明
✅ 対応単一ホスト上のコンテナーネットワーク設定bridge/host/none モードの選択
✅ 対応コンテナー間の DNS 通信カスタム bridge ネットワーク + サービス名による名前解決
✅ 対応ポートの公開-p host:container によるポートマッピング
⚠️ 条件付きホスト間通信overlay ネットワーク + Swarm モードが必要
⚠️ 条件付きmacOS の --network hostLinux とは動作が異なるため、代わりに -p を推奨
❌ 対象外K8s ネットワークポリシー(NetworkPolicy)docker-production と K8s ドキュメントを使用してください
❌ 対象外外部ロードバランサー(Nginx/HAProxy)インフラストラクチャ層の機能です
❌ 対象外iptables/nftables の詳細設定Linux ネットワーク管理の機能です

このスキルを使用しない場面

❌ 使用しない✅ 代わりに使用
Docker の基礎docker-basics
コンテナーの実行docker-run
Compose のネットワークdocker-compose(Compose がネットワークを自動的に作成します)
Kubernetes のネットワークK8s のドキュメント

セキュリティと安定性

  • インターネットアクセスを許可しないネットワークには、--internal フラグを使用してください。
  • overlay ネットワークの通信を暗号化するには、--opt encrypted=true を使用してください。
  • 本番環境では --network host を避けてください。ネットワークが分離されません。
  • 実行可能なスクリプトは同梱されていません。ガイダンスのみを提供します。

📚 公式ドキュメントの参考資料

ドキュメントアドレス
Docker ネットワークの概要https://docs.docker.com/network/
docker network コマンドhttps://docs.docker.com/reference/cli/docker/network/
ネットワークドライバーhttps://docs.docker.com/network/drivers/
Bridge ネットワークhttps://docs.docker.com/network/bridge/
Overlay ネットワークhttps://docs.docker.com/network/overlay/
ポートの公開https://docs.docker.com/network/#published-ports

🧭 Docker Skills Journey

📍 現在の位置:docker-networking — ネットワーク設定

← 前へ:docker-run | → 次へ:docker-compose

FAQ

Q1: 如何快速上手此技能? A: 参考上方的快速开始章节,按步骤操作即可。

Q2: 遇到版本不兼容问题怎么办? A: 检查依赖版本,使用 lock 文件锁定,参考常见陷阱章节。

Q3: 如何在生产环境使用? A: 参考最佳实践章节,确保配置正确,做好监控和日志。

Q4: 性能如何优化? A: 参考性能优化相关文档,使用缓存、索引等手段。

Q5: 如何贡献或反馈问题? A: 在 GitHub 仓库提交 Issue 或 Pull Request。

Q6: 是否支持中文? A: 支持中文文档和中文注释,详见国内适配章节。

コメント