Docker 网络模式 bridge host none 区别及配置方法

文章导读
生产环境通常首选自定义 Bridge 模式兼顾隔离与灵活,高性能或特殊监控场景才考虑 Host 模式,完全隔离需求选 None 模式。
📋 目录
  1. 快速配置命令
  2. 模式原理与差异
  3. 验证与排查
  4. 选型决策与常见坑
A A

生产环境通常首选自定义 Bridge 模式兼顾隔离与灵活,高性能或特殊监控场景才考虑 Host 模式,完全隔离需求选 None 模式。

先说结论:生产环境推荐使用自定义 Bridge 网络,追求极致性能或需绑定宿主机端口时用 Host,无需联网的批处理任务用 None。

  • 适合:自定义 Bridge 适合大多数微服务通信,Host 适合低延迟网络服务,None 适合安全隔离任务
  • 重点看:安全需求 None 最高,性能需求 Host 最高,运维复杂度 Host 最高 (需管理端口冲突)
  • 别忽略:默认 Bridge 不支持容器名 DNS 解析,Host 模式隔离性降低 (共享宿主机网络栈)

快速配置命令

# 默认 Bridge 模式 (不推荐生产多容器协作)
docker run -d `--name` web nginx

# 自定义 Bridge 模式 (推荐生产环境)
docker network create -d bridge my-net
docker run -d `--network` my-net `--name` web nginx

# 指定 Host 模式
docker run -d `--network` host nginx

# 指定 None 模式
docker run -d `--network` none alpine

# None 模式后续联网
docker network connect my-net <container_id>

模式原理与差异

Bridge 模式是 Docker 默认网络,容器通过虚拟网桥 docker0 连接,默认网段通常为 172.17.0.0/16。容器启动时会创建 veth pair 虚拟网卡,一端在容器内,一端连接网桥,通过 NAT 规则与外界通信。

Host 模式容器共享宿主机网络栈,直接使用宿主机 IP 和端口,绕过网络隔离层,因此性能损耗最小但隔离性最差。None 模式仅创建 loopback 接口,彻底阻断内外通信,适合对网络隔离有严格要求的场景。

验证与排查

使用 docker inspect 查看 NetworkMode 字段确认模式。进入容器内部使用 ip addr 检查网卡和 IP 分配情况,Host 模式下应看到宿主机网卡,None 模式下仅见 lo 接口。

Docker 网络模式 bridge host none 区别及配置方法
# 查看容器网络模式
docker inspect -f '{{.HostConfig.NetworkMode}}' <container_id>

# 容器内连通性测试 (优先使用 curl,nc 可能未安装)
docker exec -it <container_id> curl -v http://www.baidu.com

# 宿主机测试容器端口连通性 (使用 curl 或 telnet)
curl -v http://<container_ip>:<port>

选型决策与常见坑

1. 网络选型决策:

  • 需要容器间通过名称通信?选自定义 Bridge。
  • 需要极致性能且信任容器内容?选 Host。
  • 需要完全断网运行?选 None。

2. 常见问题排查:

  • DNS 解析失败:默认 Bridge 不支持容器名 DNS 解析,生产环境多容器协作应使用自定义 Bridge 网络。
  • 端口冲突:Host 模式存在端口冲突风险,因为容器直接占用宿主机端口,启动前需检查端口占用。
  • None 模式联网:None 模式容器默认无法联网,若后续需要通信需手动连接网络 (docker network connect)。
  • 命令兼容性:验证连通性时,Alpine 等最小化镜像可能未安装 netcat (nc),建议使用 curl 或 wget 替代。

3. 安全提示:

Host 模式隔离性降低,安全风险相对较高,不建议运行不可信代码。生产环境应优先使用自定义 Bridge 配合端口映射。