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”
  • “端口映射”、“publish port”
  • “容器之间怎么通信”、“跨容器通信”
  • “网络不通”、“network troubleshooting”

网络模式对比

模式隔离性用途跨主机?
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 的网络。→ 解决方法:使用 -p 发布端口,而不是 --network host。
  • 未启用 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: 支持中文文档和中文注释,详见国内适配章节。

评论

支持 Markdown