如何在多主机docker swarm
上访问群组服务。
对于docker swarm,假设服务名称为: 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
答案 0 :(得分:1)
根据您的症状,听起来您可以在同一个覆盖网络上运行容器,并且可以在同一主机上使用DNS解析进行通信,但您只是在主机之间遇到问题。对于主机之间的重叠网络,您需要以下防火墙规则:
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(这是数据端口)和协议50(使用IPSEC的安全网络所需)。