我已经创建了一个拥有swarm内部网站的docker swarm,并在外面发布了8080端口。我想使用在端口80上运行外部群集的Nginx来使用该端口,这将执行服务器名称解析和主机静态文件。
问题是,swarm使用iptables自动将端口8080发布到互联网,我不知道是否可以只允许本地nginx实例使用它?因为当前用户可以访问80和8080端口上的站点,而第二个端口被破坏(没有图像)。
尝试玩ufw,但它没有用。手动更改iptables也是一场噩梦,因为我必须在每次更新后在每个swarm节点上执行此操作。任何解决方案?
编辑:我不能在swarm和nginx外部使用相同的网络,因为覆盖网络与普通的单主机容器不兼容。从理论上讲,我可以将nginx放到swarm中,但我更喜欢将它保持在包含静态文件的同一主机上。
答案 0 :(得分:2)
是的,如果容器位于同一网络中,则您不需要发布容器的端口以相互访问。
在您的情况下,您可以从nginx容器发布端口80,而不是从网站容器中发布任何端口。只要两个容器位于同一个Docker网络中,Nginx仍然可以访问端口8080上的网站容器。
答案 1 :(得分:2)
否,现在您无法将已发布的端口绑定到IP(甚至不绑定到127.0.0.1
)或接口(如环回接口lo
) 。但是处理这个问题有两个问题:
所以你可以订阅他们和/或参与讨论。
进一步阅读:
答案 2 :(得分:0)
使用扩展语法
--publish published=8080,target=80,mode=host
它将绑定0.0.0.0
,但不会绑定到入口,并且不能从外部访问