host模式使容器复用宿主机网络栈,不分配独立ip、不走nat、忽略-p映射;启动时加--net=host,docker-compose中设network_mode: host,适用于本地调试、直连代理或低延迟场景,但不适用于多服务端口冲突或生产环境。

直接让容器复用宿主机的网络栈,不分配独立 IP、不走 NAT、不依赖 -p 端口映射——这就是 host 模式的核心目的。配置本身很简单,关键在于理解适用边界和规避限制。
命令行启动时启用 host 模式
运行容器时加 --net=host(或 --network host)即可:
docker run -d --name nginx-host --net=host nginx- 容器内服务(如 Nginx)会直接监听宿主机的
0.0.0.0:80,访问http://localhost即可命中 -
-p参数会被忽略,Docker 会提示:“Published ports are discarded when using host network mode”
在 docker-compose.yml 中配置
对单个服务设置 network_mode: host:
- 不能与
ports或expose共存,否则无效 - 多个服务共用 host 模式时,彼此无法通过服务名通信(如
api不能用db:5432) - 需改用
localhost:5432或宿主机真实 IP 访问其他本地服务
示例:
version: '3.8'
services:
api:
image: my-api:latest
network_mode: host
monitor:
image: prom/node-exporter
network_mode: host
适用场景与典型用途
host 模式不是通用替代方案,适合以下轻量、高性能或调试需求:
- 本地开发调试,快速验证服务是否能绑定到
:80或:443等特权端口 - 需要直连宿主机代理(如
127.0.0.1:1080)、监控工具(node_exporter、cadvisor) - 避免 NAT 开销的低延迟场景(如实时日志采集、性能压测代理)
不适合:
- 多容器共存且需隔离端口(两个服务都想监听
8080会冲突) - 生产环境部署(缺乏网络隔离、无内置 DNS、防火墙策略难统一管控)
验证是否生效
进入容器后执行以下命令确认:
-
ip addr:输出应与宿主机完全一致,看不到eth0@ifXX类虚拟网卡 -
cat /proc/1/ns/net:结果 inode 应与宿主机上该命令输出一致(表示共享 network namespace) -
ss -tlnp | grep :80:看到进程属主为容器内进程名(如nginx),说明端口由容器直接监听











