docker swarm访问服务

docker swarm访问服务,docker,docker-swarm,Docker,Docker Swarm,如何在多主机上访问swarm服务docker swarm 对于docker swarm,假设服务的名称为:abc、pqr、xyz 如果服务位于同一主机中,则它们可以通过或访问 但如果它们位于不同的主机上,则无法通过或访问。即使ping到其他服务名称也不起作用 docker service create --constraint 'node.labels.momachinename == t4301' --name abc --network=ni_default mo-vo:7.10.0s no

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

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

如果服务位于同一主机中,则它们可以通过或访问

但如果它们位于不同的主机上,则无法通过或访问。即使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

从您的症状来看,听起来您的容器运行在同一覆盖网络上,并且可以在同一主机上使用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的安全网络需要)

实际上,它应该在另一台主机上工作,您是否使用了
docker overlay network
(在多主机上下文中需要使用服务名称DNS)?@François。。已编辑的命令..命令似乎很好,也覆盖了网络。。。您从哪里发出http/ping命令?主机还是在运行的容器中?docker exec-it。。。bash,,然后ping..对了,您确定您的服务已启动
docker服务ls
正常吗?