首页/云/云与容器速查/host 网络模式
容器与 Docker106 条

host 网络模式

容器直接复用宿主网络栈:无 NAT 与 veth 转发开销,吞吐和延迟表现较佳;代价是失去网络隔离、端口与宿主进程直接竞争,且仅 Linux 语义完整。

云与容器速查云更新于 2026-10-13

host 网络模式是什么

host 网络模式下容器不创建独立的网络命名空间,直接复用宿主机的网络栈:容器内的 127.0.0.1 就是宿主机回环,容器监听的端口也就是宿主机端口。因为没有 veth 转发与 NAT 环节,吞吐与延迟表现更接近原生裸跑,适合高吞吐网关和需要看到真实客户端 IP 的代理。代价是失去网络隔离,端口与宿主进程直接竞争,而且完整语义只在 Linux 上成立。

基本信息

语法docker run --network host
效果容器内 127.0.0.1 即宿主;监听端口即宿主端口
-p 行为host 模式下无效(会有告警),端口无需也无法映射
隔离性没有独立网络命名空间,容器与宿主进程共享端口空间
平台差异Linux 语义完整,Docker Desktop 在 macOS / Windows 上行为不同

典型使用场景

  • 高吞吐网关与反向代理:省掉 NAT 与 veth 转发开销,压榨网络性能
  • 监控 agent 采集宿主网络指标,需要与宿主同一网络视图
  • 需要真实客户端来源 IP 的代理服务,避免经过 NAT 后丢失原始地址
  • 性能压测工具直接跑在宿主网络上,避免测量结果被转发开销污染
  • 与宿主上已有服务配合,需要端口与宿主保持一致的场景

使用示例

使用示例
docker run -d --network host --name node-exporter prom/node-exporter
docker run --rm --network host nicolaka/netshoot ss -lntp | head   # 查看宿主端口占用
docker inspect node-exporter -f '{{.HostConfig.NetworkMode}}'   # 确认网络模式为 host
# 端口冲突时直接查宿主监听即可,容器与宿主共用同一网络命名空间

网络模式对比

模式隔离性性能适用场景
bridge(默认)独立命名空间加 NAT有转发开销常规业务容器
host无独立命名空间接近宿主原生高吞吐服务、需真实客户端 IP
none只有回环接口无外网能力纯离线计算任务
自定义 bridge独立命名空间加服务名 DNS有转发开销多容器按服务名互访
host 模式常被用来『绕开端口不通』这类临时问题:但容器监听的端口就是宿主端口,是否暴露取决于宿主防火墙,安全面会同步放大,长期使用必须补防火墙与访问控制。
host 模式下同一个端口只能被一个进程占用,多个容器想用同一端口会直接启动失败;需要多实例并存时回到 bridge 模式并用端口映射区分。

易错点

  • 在 Docker Desktop 上以为 host 模式行为与 Linux 一致:macOS 与 Windows 上的表现不同
  • host 模式下仍以为 -p 生效:参数被忽略且只有告警,实际不存在映射关系
  • 多个容器都用 host 模式抢同一个端口,后启动的容器直接失败
  • 宿主没有防火墙策略,容器监听的服务默认对公网可见,风险被低估

数据来源与参考

  • Docker Docs:Host network driver

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌