Host 网络模式
Host 网络模式让容器共享宿主机网络栈,下面介绍使用方法与限制。
基本用法
Bash
# 使用 host 网络
docker run -d --network host nginx
# 容器直接使用宿主机端口,无需 -p 映射
特点
优势
- 零网络开销:无 NAT、无网桥,性能最高
- 直接使用宿主机 IP:容器对外暴露 IP 与宿主机相同
- 无需端口映射:容器监听端口直接对外
限制
- 端口冲突:容器端口不能与宿主机已有端口冲突
- 网络不隔离:容器与宿主机共享网络栈
- 仅 Linux 支持:macOS/Windows Docker Desktop 不支持
对比
| 对比项 | Bridge | Host |
|---|---|---|
| 网络隔离 | ✅ 隔离 | ❌ 共享 |
| 端口映射 | 需要 -p | 不需要 |
| 性能 | 有 NAT 开销 | 零开销 |
| 端口冲突 | 不冲突 | 可能冲突 |
| 平台 | 全平台 | 仅 Linux |
适用场景
高性能网络
Bash
# 网络密集型应用
docker run -d --network host my-high-throughput-app
网络监控
Bash
# 需要访问宿主机网络接口
docker run -d --network host net-tools
端口固定
Bash
# 容器使用固定端口,无需映射
docker run -d --network host -e PORT=80 my-app
示例
Nginx
Bash
# Host 网络模式运行 Nginx
docker run -d --network host nginx
# 访问
curl http://localhost:80 # 直接访问,无需 -p
多容器
Bash
# 创建 host 网络容器
docker run -d --network host --name web nginx
docker run -d --network host --name app my-app
# 两个容器共享宿主机网络栈
# 如果 web 监听 80,app 不能监听 80(冲突)
注意事项
Bash
# 端口冲突
docker run -d --network host nginx # 监听 80
# 如果宿主机已有服务监听 80,会启动失败
Bash
# 查看端口占用
sudo lsof -i :80
sudo netstat -tlnp | grep 80
Host 网络模式下容器直接使用宿主机端口,需确保无冲突。
与端口映射对比
Bash
# Bridge 模式(需要映射)
docker run -d -p 8080:80 nginx
# 外部访问: http://localhost:8080
# Host 模式(无需映射)
docker run -d --network host nginx
# 外部访问: http://localhost:80
要点总结
--network host共享宿主机网络栈,零网络开销- 容器直接使用宿主机端口,无需 -p 端口映射
- 端口不能与宿主机已有服务冲突
- 性能最高但无网络隔离,适合高性能需求
- 仅 Linux 支持,macOS/Windows Docker Desktop 不支持
📝 发现内容有误?点击此处直接编辑