docker-networking について
Docker ネットワークの設定とトラブルシューティングを案内するスキルです。コンテナ通信やポート公開を扱う開発者向けに、モードの比較、手順、コマンド、よくある問題をまとめています。
主な機能
- 01bridge、host、overlay、none の各モード
- 02カスタム bridge ネットワークと DNS
- 03ポート公開の指針
- 04Swarm overlay の設定
- 05接続確認用コマンド
- 06ネットワークのセキュリティ上の注意
活用シーン
- 01コンテナ用のネットワークモード選択
- 02コンテナ間の名前ベース通信を有効化
- 03コンテナのポートをホストに公開
- 04コンテナの DNS や接続障害を診断
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ full-stack-skills/ docker-skills --skill docker-networkingインストール後、Claude Code で/docker-networkingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlexamples/01-web-db-network.md02-custom-network.mdreferences/01-network-modes.md02-port-mapping.md03-network-troubleshooting.md詳細
Docker Networking — ネットワーク設定とコンテナー間通信
Docker のネットワークモード、設定、トラブルシューティングに関する包括的なガイダンスです。
使用する場面
ユーザーが次の内容に言及した場合は、必ずこのスキルを使用してください。
- 「docker network」、「コンテナーのネットワーク」
- 「bridge network」、「host network」、「overlay network」
- 「ポートマッピング」、「ポートの公開」
- 「コンテナー間の通信方法」、「コンテナー間通信」
- 「ネットワークに接続できない」、「ネットワークのトラブルシューティング」
ネットワークモードの比較
| モード | 分離 | 用途 | ホスト間通信? |
|---|---|---|---|
| bridge(デフォルト) | コンテナーレベル | 単一ホスト上のコンテナー | ❌ |
| host | なし(ホストを共有) | 最高のパフォーマンス、分離なし | ❌ |
| overlay | コンテナーレベル | Swarm による複数ホスト構成 | ✅ |
| none | 完全 | ネットワークが不要な場合 | ❌ |
| macvlan/ipvlan | MAC/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 host | Linux とは動作が異なるため、代わりに -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: 支持中文文档和中文注释,详见国内适配章节。