我已经创建了一个docker swarm,并在其中包含一个网站,将端口8080发布到外部。我想使用在swarm之外运行的Nginx消耗该端口,Nginx运行在80端口上,它将执行服务器名称解析和托管静态文件。
问题是,swarm自动使用iptables将端口8080发布到互联网,我不知道是否可能仅允许本地nginx实例使用它?因为目前用户可以在80和8080端口访问站点,第二个端口是损坏的(没有图像)。
我尝试使用ufw进行操作,但它不起作用。手动更改iptables将是一场噩梦,因为每次更新后我都必须在每个swarm节点上这样做。有什么解决方案吗?
编辑:我不能在swarm和swarm之外使用相同的网络,因为叠加网络与普通的单主机容器不兼容。理论上,我可以将nginx放到swarm中,但我更喜欢将其保持独立,位于包含静态文件的相同主机上。
问题是,swarm自动使用iptables将端口8080发布到互联网,我不知道是否可能仅允许本地nginx实例使用它?因为目前用户可以在80和8080端口访问站点,第二个端口是损坏的(没有图像)。
我尝试使用ufw进行操作,但它不起作用。手动更改iptables将是一场噩梦,因为每次更新后我都必须在每个swarm节点上这样做。有什么解决方案吗?
编辑:我不能在swarm和swarm之外使用相同的网络,因为叠加网络与普通的单主机容器不兼容。理论上,我可以将nginx放到swarm中,但我更喜欢将其保持独立,位于包含静态文件的相同主机上。
docker service create
命令时,请消除IP地址,仅发布端口映射:--publish 8080:8080
。 - Chris Townsenddocker service create --publish 80:80 --replicas 1 --name test-nginx nginx
等待docker service ls
显示它正在运行,然后尝试从集群中的每台机器上的http://127.0.0.1或使用它们的IP地址,您应该可以从每台机器上获得欢迎来到nginx页面,即使您只有一个实例在运行。 - Chris Townsend