使用 host 网络
如果一个容器使用的是 host
网络模式, 那么此容器的协议栈将不会跟 Docker 的宿主机隔离(容器会跟宿主机共享同一个网络 namespace),此容器也不会获得单独的 IP 地址。例如,如果你跑着一个使用了 host
模式且绑定了80端口的容器,那么该容器的应用程序就可以在宿主机 IP 地址的80号端口上使用。
注意
鉴于在使用
host
模式联网时容器没有自己的IP地址,端口映射不会生效,而且-p
,--publish
,-P
, 和--publish-all
选项被忽略,而是产生一个警告:WARNING: Published ports are discarded when using host network mode
Host 模式网络在优化性能方面很有用,在容器需要处理大量端口的情况下也很有用,因为它不需要网络地址转换(NAT),而且不会为每个端口创建 "用户区代理(userland-proxy,关键字 docker-proxy)"。
Host 网络驱动只适用于 Linux 主机,不支持 Docker Desktop for Mac、Docker Desktop for Windows 或 Docker EE for Windows Server。
你可以在 swarm 服务上使用 host
网络,方法是在执行 docker service create
命令时使用 --network host
。在这种情况下,控制流量(与管理 swarm 和服务有关的流量)依然通过 overlay 网络传递,单独的 swarm 服务容器则使用 Docker daemon 的宿主机网络和端口发送数据。这会带来一些额外的限制。举个例子,如果一种服务容器绑定了80端口,那在同一个 swarm 节点上,只能有一个这种服务容器。
下一步
- 通关 host 网络教程
- 学习 容器角度的网络
- 学习 bridge 网络
- 学习 overlay 网络
- 学习 Macvlan 网络