仅将docker swarm模式端口发布到localhost

时间:2016-10-20 10:54:41

标签: nginx docker docker-swarm docker-networking

我已经创建了一个拥有swarm内部网站的docker swarm,并在外面发布了8080端口。我想使用在端口80上运行外部群集的Nginx来使用该端口,这将执行服务器名称解析和主机静态文件。

问题是,swarm使用iptables自动将端口8080发布到互联网,我不知道是否可以只允许本地nginx实例使用它?因为当前用户可以访问80和8080端口上的站点,而第二个端口被破坏(没有图像)。

尝试玩ufw,但它没有用。手动更改iptables也是一场噩梦,因为我必须在每次更新后在每个swarm节点上执行此操作。任何解决方案?

编辑:我不能在swarm和nginx外部使用相同的网络,因为覆盖网络与普通的单主机容器不兼容。从理论上讲,我可以将nginx放到swarm中,但我更喜欢将它保持在包含静态文件的同一主机上。

3 个答案:

答案 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,但不会绑定到入口,并且不能从外部访问