我尝试通过遵循此document
在docker swarm模型中创建服务然后创建部署服务,我在这里使用jwilder/whoami
而不是文档中的nginx
,
docker service create --name my-web --publish published=8888,target=8000 --replicas 2 jwilder/whoami
如文件所述:
当您在任何节点上访问端口8080时,Docker会将您的请求路由到 一个活动的容器。
我认为我可以从任何节点访问my-web
服务,但是我发现只有一个节点可以工作:
这是怎么回事?
答案 0 :(得分:2)
这可能是由于节点之间的端口被阻塞引起的。群集网状网络使用“入口”网络将发布的端口连接到服务的VIP。该入口网络是使用vxlan实现的覆盖网络。为此,您需要:
参考:https://docs.docker.com/network/overlay/
这些端口有可能在许多级别被阻止,包括iptables,路由器上的防火墙,我什至已经看到VMware通过其NSX工具(也实现了vxlan)阻止了这些端口。
对于iptables,我通常使用以下命令:
iptables -A INPUT -p tcp -m tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 7946 -j ACCEPT
iptables -A INPUT -p tcp -m udp --dport 4789 -j ACCEPT
iptables -A INPUT -p 50 -j ACCEPT
如果您使用Firewalld或需要更改网络路由器上的防火墙规则,以上内容将有所不同。