外观
6. Docker 网络管理命令
相关配置说明
Docker 网络的基础配置请参考:04-Docker 配置 - 网络配置
6.1 Docker 网络概述
Docker 提供了强大的网络功能,支持多种网络驱动类型。理解 Docker 网络架构是有效管理容器网络的关键。
网络驱动选择指南
- Bridge: 默认选择,适用于单机容器间通信
- Host: 最高性能,但安全性较低
- Overlay: 跨主机通信,适用于 Swarm 集群
- Macvlan: 需要直接硬件访问时使用
- None: 完全隔离网络环境
6.2 网络创建和管理
6.2.1 创建网络
bash
# 创建基础 bridge 网络
docker network create NETWORK_NAME
# 创建带参数的网络
docker network create \
--driver bridge \
--subnet 192.168.1.0/24 \
--gateway 192.168.1.1 \
my-bridge-network1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
常用参数说明:
| 参数 | 说明 | 示例 |
|---|---|---|
--driver 或 -d | 网络驱动类型 | bridge, overlay, macvlan |
--subnet | 网络子网 | 192.168.1.0/24 |
--gateway | 网络网关 | 192.168.1.1 |
--ip-range | IP 分配范围 | 192.168.1.10-192.168.1.50 |
--aux-address | 辅助 IP 地址 | "my-router=192.168.1.2" |
--internal | 内部网络 | 阻止外部访问 |
--attachable | 可附加容器 | 仅 overlay 网络 |
--scope | 网络作用域 | local, swarm |
网络命名规范
- 使用小写字母、数字、下划线
- 避免使用特殊字符
- 建议添加环境前缀,如
prod_web_network
子网冲突风险
创建网络前务必检查子网是否与现有网络冲突。可使用 docker network ls 和 docker network inspect 检查。
6.2.2 查看网络
bash
# 列出所有网络
docker network ls
# 查看网络详细信息
docker network inspect NETWORK_NAME
# 过滤特定类型的网络
docker network ls --filter driver=bridge1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
输出示例:
NETWORK ID NAME DRIVER SCOPE
7fca4eb8c647 bridge bridge local
9f904ee27bf5 none null local
cf03ee007fb4 host host local
78b02ee499d5 my-bridge-network bridge local1
2
3
4
5
2
3
4
5
6.2.3 删除网络
bash
# 删除指定网络
docker network rm NETWORK_NAME
# 删除多个网络
docker network rm network1 network2 network3
# 强制删除(忽略错误)
docker network rm -f NETWORK_NAME1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
删除网络的风险
- 删除网络会断开所有连接的容器
- 正在使用的网络无法删除
- 生产环境删除前务必确认影响范围
6.3 容器网络连接管理
6.3.1 连接容器到网络
bash
# 将运行中的容器连接到网络
docker network connect NETWORK_NAME CONTAINER_NAME
# 连接时指定IP地址
docker network connect \
--ip 192.168.1.100 \
NETWORK_NAME \
CONTAINER_NAME
# 连接时指定别名
docker network connect \
--alias db \
NETWORK_NAME \
CONTAINER_NAME1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
网络连接最佳实践
- 优先使用
--alias而非 IP 地址 - 一个容器可以连接多个网络
- 默认网络 (bridge) 无需显式连接
6.3.2 从网络断开容器
bash
# 从网络断开容器
docker network disconnect NETWORK_NAME CONTAINER_NAME
# 强制断开(忽略错误)
docker network disconnect -f NETWORK_NAME CONTAINER_NAME1
2
3
4
5
2
3
4
5
强制断开的影响
强制断开可能导致容器内应用连接中断,建议先停止相关服务。
6.4 网络维护命令
6.4.1 清理未使用网络
bash
# 清理未使用的网络
docker network prune
# 强制清理(不询问确认)
docker network prune -f
# 查看将要清理的网络
docker network prune --dry-run1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
清理网络的安全检查
prune只会删除未使用的网络- 使用
--dry-run预览将要删除的内容 - 生产环境建议手动删除而不是使用
prune
6.4.2 网络驱动管理
bash
# 查看网络驱动插件
docker network ls --filter type=custom
# 安装网络驱动插件(需要插件支持)
docker plugin install network-plugin
# 启用/禁用网络驱动
# 注意:内置驱动无法直接管理1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
6.5 网络故障排查
6.5.1 常见网络问题诊断
bash
# 检查网络连接状态
docker network inspect NETWORK_NAME
# 查看容器网络配置
docker inspect CONTAINER_NAME --format '{{.NetworkSettings.Networks}}'
# 检查网络连通性
docker exec CONTAINER_NAME ping TARGET_IP
# 查看网络统计信息
docker network stats1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
6.5.2 网络配置验证
bash
# 验证网络配置
docker run --rm --network NETWORK_NAME busybox ip addr
# 测试 DNS 解析
docker run --rm --network NETWORK_NAME busybox nslookup google.com
# 检查端口映射
docker port CONTAINER_NAME1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
网络故障排查步骤
- 检查容器是否正确连接到网络
- 验证网络配置参数
- 测试容器间连通性
- 检查防火墙和安全组规则
- 查看 Docker daemon 日志
6.6 最佳实践
6.6.1 网络规划建议
bash
# 生产环境网络创建示例
docker network create \
--driver bridge \
--subnet 10.10.0.0/16 \
--gateway 10.10.0.1 \
--ip-range 10.10.1.0/24 \
--label project=webapp \
production-network1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
6.6.2 安全配置
bash
# 创建内部网络(不允许外部访问)
docker network create --internal secure-network
# 使用 overlay 网络实现跨主机安全通信
docker network create \
--driver overlay \
--opt encrypted=true \
secure-overlay1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
网络安全原则
- 使用内部网络隔离敏感服务
- 避免使用 host 网络模式
- 定期清理未使用的网络
- 监控网络流量异常
6.6.3 性能优化
bash
# 为高性能应用使用 host 网络
docker run --network host high-performance-app
# 使用 macvlan 避免网络开销
docker network create \
--driver macvlan \
--subnet 192.168.1.0/24 \
--gateway 192.168.1.1 \
-o parent=eth0 \
macvlan-network1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
性能优化建议
- host 网络提供最佳性能
- macvlan 适合需要硬件访问的应用
- overlay 网络有额外开销,应按需使用