部署nginx

host 模式

1
2
3
4
5
6
7
8
9
version: "2"
services:
nginx:
image: nginx:latest
container_name: nginx1
# 不能写端口,容器是什么端口就是什么端口
# ports:
# - 8888:80
network_mode: host

https://docs.docker.com/network/drivers/host/

host如果对容器使用网络模式,则该容器的网络堆栈不会与 Docker 主机隔离(容器共享主机的网络命名空间),并且容器不会分配自己的 IP 地址。例如,如果您运行绑定到端口 80 的容器并且使用host 网络,则该容器的应用程序可在主机 IP 地址的端口 80 上使用。

笔记

鉴于使用模式网络时容器没有自己的 IP 地址 host端口映射不会生效,并且-p--publish-P--publish-all选项将被忽略,而是产生警告:

1
WARNING: Published ports are discarded when using host network mode

主机模式网络对于优化性能非常有用,并且在容器需要处理大量端口的情况下,因为它不需要网络地址转换(NAT),并且不会为每个端口创建“用户层代理”。

主机网络驱动程序仅适用于 Linux 主机,Docker Desktop for Mac、Docker Desktop for Windows 或 Docker EE for Windows Server 不支持。

您还可以通过传递 给命令来将host网络用于 swarm 服务。在这种情况下,控制流量(与管理 swarm 和服务相关的流量)仍然通过覆盖网络发送,但各个 swarm 服务容器使用 Docker 守护程序的主机网络和端口发送数据。这会产生一些额外的限制。例如,如果服务容器绑定到端口 80,则在给定的 swarm 节点上只能运行一个服务容器。--network host``docker service create

image-20231025112015983