docker swarm访问服务

时间:2017-07-01 13:06:55

标签: docker docker-swarm

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

对于docker swarm,假设服务名称为: abc,pqr,xyz

如果服务位于相同主机中,则可以http://pqr/ahttp://xyz/a

进行访问

但如果他们在不同的主机上,则无法通过http://pqr/ahttp://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

1 个答案:

答案 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的安全网络所需)。