docker群访问服务

如何在多主机docker swarm上访问群集服务。

对于docker群,可以说服务名为: abc,pqr,xyz

如果这些服务被放置在同一主机中,则可以通过http:// pqr / a或http:// xyz / a

但如果他们在不同的主机上,他们无法通过http:// pqr / a或http:// xyz / a访问 。 即使ping到其他服务名称也不起作用。

 docker service create --constraint 'node.labels.momachinename == t4301' --name abc --network=ni_default mo-vo:7.10.0s node /a/src/start.js docker service create --constraint 'node.labels.momachinename == t4302' --name pqr --network=ni_default mo-vo:7.10.0s node /a/src/start.js docker network ls NETWORK ID NAME DRIVER SCOPE d7478273de19 bridge bridge local 485112e08c0f docker_gwbridge bridge local c8a75eb27f1f host host local 5rmqgswur2lp ingress overlay swarm q26p8tdr0xw6 networld overlay swarm d2kf3bfdbmol ni_default overlay swarm 64094b86b804 none null local 

从你的症状来看,听起来你的容器运行在同一个覆盖networking上,并且可以在同一个主机上使用DNSparsing进行通信,但是你只是在主机之间出现问题。 对于主机之间的覆盖networking,您需要以下防火墙规则:

 iptables -A INPUT -p tcp -m tcp --dport 7946 -j ACCEPT iptables -A INPUT -p tcp -m udp --dport 7946 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 4789 -j ACCEPT iptables -A INPUT -p 50 -j ACCEPT 

这是tcp / udp(这是控制端口)的端口7946,tcp(这是数据端口)的端口4789,以及使用IPSEC的安全networking所需的协议50。