Host模式让容器直接复用宿主机网络命名空间,无NAT、无端口映射、无额外iptables规则,网络性能接近裸机;需用--network host启动,不分配IP、不创建veth,监听须绑定0.0.0.0或宿主机IP,禁用-p映射,存在端口冲突与安全风险。
容器使用 host 网络模式,就是让容器跳过 docker 默认的网络栈(如 bridge 模式),直接复用宿主机的网络命名空间。这样容器内进程看到的网络接口、ip、端口和宿主机完全一致,没有 nat、没有端口映射、没有额外 iptables 规则,网络延迟和吞吐接近裸机水平。
Host 模式的核心行为
启用后,容器不再拥有独立的 network namespace;/proc/net、netstat、ss 等命令输出与宿主机一致;容器启动时不会分配 IP,也不创建 veth 设备;所有监听需绑定 0.0.0.0 或具体宿主机 IP(不能 bind 127.0.0.1 仅限本容器)。
启动时启用 Host 网络
- docker run 命令加 --network host 参数,例如:
docker run --network host -d nginx - Compose 文件中写为:
network_mode: "host"(注意:不能同时声明 ports 字段,会报错) - Podman 同样支持 --network host,语义一致
关键限制与注意事项
- 容器无法通过 -p 映射端口 —— 因为根本没走端口转发,端口冲突由应用自身负责
- 多个容器若监听同一端口(如都跑在 80),会因地址已被占用而启动失败
- 容器内访问 localhost 就是访问宿主机本身,不是容器自己;调试时容易混淆
- 安全边界弱化:容器可直接操作宿主机 netfilter、查看所有 socket,不适用于多租户或不可信镜像
适用场景建议
- 高性能网络代理(如 Envoy、Cilium agent)、监控采集器(如 node_exporter)
- K8s 中 DaemonSet 类组件,需监听宿主机特定接口或端口
- 本地开发调试网络栈行为,或压测瓶颈定位时临时绕过 Docker 网络层
- 边缘设备资源受限环境,避免 bridge 模式带来的 CPU 和内存开销

















