2. Docker 网络模型总览:五大驱动对比
Docker 的网络模型是容器化架构的基石。理解不同网络驱动的工作方式,是排查容器通信故障的前提。Docker 原生提供五种核心网络驱动:Bridge、Host、None、Overlay 和 Macvlan。每种驱动在隔离性、性能、跨主机通信能力上各有取舍。
2.1 网络驱动核心特性对比
| 驱动名称 | 隔离级别 | 跨主机通信 | 性能损耗 | 典型场景 |
|---|---|---|---|---|
| Bridge | 容器间隔离,通过 NAT 访问外网 | 需端口映射或额外路由 | 低(NAT 转换) | 单机开发、测试环境 |
| Host | 无隔离,直接使用宿主机网络栈 | 直接使用宿主机 IP | 无 | 性能敏感型应用(如 Nginx) |
| None | 完全隔离,无网络接口 | 不支持 | 无 | 安全沙箱、离线计算任务 |
| Overlay | 容器间隔离,VXLAN 隧道封装 | 原生支持(Swarm/K8s) | 中(封装/解封装) | 跨主机容器编排集群 |
| Macvlan | 容器拥有独立 MAC 地址 | 直接暴露于物理网络 | 极低 | 遗留应用迁移、网络监控 |
选型建议: 单机开发首选 Bridge;生产集群必须用 Overlay;追求极致性能且安全要求低时用 Host;需要容器像物理机一样接入网络时用 Macvlan。
2.2 五大驱动工作机制详解
2.2.1 Bridge 驱动
Docker 默认驱动。在宿主机上创建一个虚拟网桥 docker0,容器通过 veth pair 连接到该网桥。容器间可直接通信,访问外网需通过 iptables NAT 转换。
- IP 分配: 默认子网
172.17.0.0/16,容器自动获取 IP。 - 端口映射:
-p 8080:80将宿主机端口映射到容器端口。 - 故障点: iptables 规则冲突、网桥转发未开启。
2.2.2 Host 驱动
容器直接使用宿主机网络命名空间,不进行网络隔离。容器内端口直接监听在宿主机 IP 上。
- 优势: 零网络损耗,适合高吞吐场景。
- 风险: 端口冲突、安全隔离缺失。
- 使用方式:
docker run --network host。
2.2.3 None 驱动
容器创建时不分配任何网络接口,只有 loopback 设备。适用于完全不需要网络访问的离线任务。
- 典型用途: 批处理作业、安全审计容器。
- 扩展: 可后续手动添加自定义网络接口。
2.2.4 Overlay 驱动
基于 VXLAN 技术,在跨主机容器间建立二层网络。Docker Swarm 和 Kubernetes 均依赖此驱动实现服务发现与通信。
- 数据平面: 使用 VXLAN 封装,UDP 端口 4789。
- 控制平面: 依赖分布式键值存储(如 etcd、consul)。
- 性能: 相比 Host 驱动有 5%-15% 的吞吐损耗。
2.2.5 Macvlan 驱动
为每个容器分配一个物理网络中的 MAC 地址,使容器看起来像直接连接到物理交换机。容器可直接使用宿主机所在子网的 IP。
- 模式: Bridge 模式(默认)、802.1q trunk 模式。
- 限制: 宿主机网卡需支持混杂模式;部分云环境不支持。
- 适用: 需要容器直接暴露于现有网络架构的场景。
2.3 网络驱动选择决策流程
2.4 常见故障场景与排查要点
故障场景 1:Bridge 模式下容器无法访问外网
检查步骤:
1. 确认宿主机 IP 转发已开启:
2. 检查 iptables NAT 规则:
3. 验证 DNS 配置:
检查步骤:
1. 确认宿主机 IP 转发已开启:
sysctl net.ipv4.ip_forward 应返回 1。2. 检查 iptables NAT 规则:
iptables -t nat -L -n 查看 MASQUERADE 规则是否存在。3. 验证 DNS 配置:
cat /etc/resolv.conf 确认 nameserver 可达。
故障场景 2:Overlay 网络跨主机容器无法通信
排查要点:
- 确认所有节点已加入同一 Swarm 集群或 K8s 集群。
- 检查 VXLAN 端口(UDP 4789)是否被防火墙阻断。
- 验证分布式键值存储(etcd/consul)健康状态。
- 使用
排查要点:
- 确认所有节点已加入同一 Swarm 集群或 K8s 集群。
- 检查 VXLAN 端口(UDP 4789)是否被防火墙阻断。
- 验证分布式键值存储(etcd/consul)健康状态。
- 使用
docker network inspect 查看 Overlay 网络端点列表。
2.5 网络驱动性能基准参考
| 驱动 | TCP 吞吐量(Gbps) | 延迟(μs) | CPU 额外开销 |
|---|---|---|---|
| Host | 9.4 | 12 | 0% |
| Macvlan | 9.2 | 14 | 1% |
| Bridge | 8.8 | 18 | 3% |
| Overlay | 7.5 | 35 | 8% |
| None | N/A | N/A | 0% |
* 测试环境:10GbE 网络,MTU 1500,单流 iperf3 测试。实际性能受硬件、内核版本、网络拓扑影响。