关于 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”
- “端口映射”、“publish port”
- “容器之间怎么通信”、“跨容器通信”
- “网络不通”、“network troubleshooting”
网络模式对比
| 模式 | 隔离性 | 用途 | 跨主机? |
|---|---|---|---|
| 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 的网络。→ 解决方法:使用-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 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: 支持中文文档和中文注释,详见国内适配章节。