Docker 网络模式总览

模式 描述 典型场景
bridge 默认模式,容器通过虚拟网络与宿主机通信,端口需手动映射 多容器隔离、开发环境
host 容器直接使用宿主机网络,无隔离,性能高但易端口冲突 高性能需求、网络调试
none 容器无网络接口,完全隔离 安全敏感场景
container 容器共享另一个容器的网络命名空间 辅助容器(如日志收集)
自定义 用户创建独立网络,支持高级配置(如子网、DNS) 复杂微服务架构

bridge 模式 vs host 模式深度对比

1. 网络架构

特性 bridge 模式 host 模式
网络隔离 容器拥有独立虚拟网络(默认网桥 docker0 直接共享宿主机网络命名空间
IP 地址 容器分配私有 IP(如 172.17.0.2 使用宿主机 IP(如 192.168.1.100
端口映射 必须通过 -p 参数映射端口(如 -p 8080:80 直接绑定到宿主机端口,无需映射
容器间通信 通过虚拟网络 IP 或容器名称(需在同一自定义网络) 通过 localhost 或宿主机 IP

2. 性能

指标 bridge 模式 host 模式
网络延迟 较高(需经过虚拟网桥) 最低(直接使用物理接口)
吞吐量 较低(受虚拟化开销影响) 接近宿主机性能

3. 安全性

特性 bridge 模式 host 模式
网络隔离 高(容器间默认隔离) 无隔离,容器暴露全部端口
攻击面 较小(仅暴露映射端口) 较大(直接暴露宿主机网络)

4. 典型使用示例

# bridge 模式(默认)
docker run -p 8080:80 --name web nginx  # 访问 http://宿主机IP:8080

# host 模式
docker run --network host --name web nginx  # 直接访问 http://宿主机IP:80

不同场景下的选择建议

1. 选择 bridge 模式的情况

多容器应用:需要隔离不同容器的网络环境。
避免端口冲突:通过映射不同宿主机端口复用服务(如 -p 8080:80-p 8081:80)。
开发测试:方便通过端口映射调试容器内服务。

2. 选择 host 模式的情况

高性能需求:如高频交易、实时流媒体等对延迟敏感的应用。
网络调试:直接使用宿主机网络工具(如 tcpdump 抓包)。
依赖宿主机网络:需绑定特定宿主机网卡或使用宿主机网络服务(如 Kubernetes CNI)。


其他网络模式补充说明

none 模式

完全隔离网络:容器只有 lo 回环接口。
适用场景:运行无需网络访问的批处理任务。

docker run --network none --name isolated-container alpine

container 模式

共享其他容器网络:新容器复用指定容器的网络命名空间。
适用场景:Sidecar 模式(如日志收集容器共享业务容器网络)。

docker run --name logger --network container:web alpine

自定义网络

灵活控制子网、DNS:支持容器间通过名称自动解析 IP。
适用场景:微服务架构中服务发现。

# 创建自定义网络
docker network create --subnet 10.5.0.0/16 my-net

# 运行容器并加入网络
docker run --network my-net --name service1 nginx
docker run --network my-net --name service2 nginx

# 容器间可直接通过名称通信
curl http://service1:80

总结

决策因素 bridge 模式 host 模式
网络性能需求 低到中
端口冲突风险 低(通过映射管理) 高(直接绑定宿主机端口)
安全性要求
多容器协作 方便(通过自定义网络) 复杂(需手动协调)

最终建议
• 优先使用 bridge 模式,避免端口冲突并保障隔离性。
• 仅在极端性能需求或特殊调试时使用 host 模式,且需严格管理宿主机端口。