首页/云/Docker 容器速查/host 模式:共享宿主机网络栈
网络与存储52 条

host 模式:共享宿主机网络栈

容器直接使用宿主机的网络命名空间:监听端口即宿主机端口,无需 -p 映射,性能路径与宿主进程一致,但端口冲突面也相同。

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

host 模式是什么

host 模式下容器不做网络命名空间隔离,直接共用宿主机的网络栈:容器监听的端口就是宿主端口,省掉 -p 映射与 NAT 转发这一层。代价是端口冲突面与宿主完全共享,两个容器抢同一端口必然有一个起不来。

基本信息

用途容器直接使用宿主网络栈
语法docker run --network host,compose 里用 network_mode: host
端口行为-p 映射在此模式下不生效,端口本来就在宿主上
平台差异传统 Linux 宿主直接可用;Docker Desktop 受虚拟化层限制,支持情况随版本变化
排查在宿主执行 ss -ltnp 看到的即为容器进程

典型使用场景

  • 需要看到真实客户端源 IP 的服务:省掉 NAT 后对端地址不再被改写
  • 高性能场景:跳过端口映射的转发开销,适合高吞吐或低延迟要求
  • 网络监控与采集类容器:需要访问宿主全部接口或抓取流量
  • 临时排障:直接起一个带 ss、tcpdump 的容器查看宿主网络状态
  • 端口已规划清楚、与宿主既有服务共存时,少维护一层映射关系

示例

示例
docker run -d --network host nginx                      # 直接占用宿主 80 端口
docker run --rm --network host nicolaka/netshoot ss -ltnp   # 在宿主命名空间里看监听
docker inspect -f '{{.HostConfig.NetworkMode}}' web      # 确认模式为 host
# compose 文件里的等价写法
# services:
#   web:
#     network_mode: host

host 与默认 bridge 对照

维度host 模式默认 bridge 模式
网络隔离无,与宿主共用命名空间独立命名空间
端口映射不需要也不能用 -p需要 -p 发布端口
客户端源 IP应用能看到真实来源默认经 NAT 改写
同一端口并发只能有一个进程占用宿主端口不冲突即可
服务名互访没有独立 DNS 域自定义网络内可按服务名解析
host 模式下容器内看到的接口就是宿主的接口,ss、netstat 输出与宿主一致,不用再区分两个命名空间,排障链路短一截。
host 容器的端口等于直接暴露在宿主上,绕过映射与端口发布策略,主机防火墙和安全组必须按宿主端口重新评估一遍。

易错点

  • 多个 host 模式容器监听同一端口时,后启动的直接失败,高密度部署前先把端口分配规划清楚
  • 以为 -p 还能生效:host 模式下映射被忽略,容器已经占了宿主端口,再叠加映射只会得到困惑的结果
  • 在 Docker Desktop 上照搬 Linux 的用法会发现行为不一致,动手前先确认平台与版本的支持范围
  • 从 bridge 迁到 host 后容器间无法按服务名互访,原有依赖关系要重新梳理,别只改一行配置就上线

数据来源与参考

  • Docker 官方文档:Host network driver(docs.docker.com/network/drivers/host)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌