其他节点

时间:2016-07-31 10:30:57

标签: docker docker-swarm

我有2个虚拟机(VM1的IP地址为192.168.56.101,VM2的IP地址为192.16.56.102,可以相互ping通)这些是我正在做的步骤:

- Create consul container on VM1 with 'docker run -d -p 8500:8500 --name=consul progrium/consul -server -bootstrap'
- Create swarm manager on VM1 with 'docker run -d -p 3376:3376 swarm manage -H 0.0.0.0:3376 --advertise 192.168.56.101:3376 consul://192.168.56.101:8500
- Create swarm agents on each VM with 'docker run -d swarm join --advertise <VM-IP>:2376 consul://192.168.56.101:8500

如果我运行docker -H 0.0.0.0:3376 info我可以看到两个节点都连接到swarm并且它们都是健康的。我也可以运行容器,它们被安排到节点。但是,如果我创建一个网络并为该网络分配一些节点,然后SSH连接到一个节点并尝试ping每个其他节点,我只能访问在同一个虚拟机上运行的节点。

两台虚拟机都有这些DOCKER_OPTS:

DOCKER_OPTS = DOCKER_OPTS="--cluster-store=consul://192.168.56.101:8500 --cluster-advertise=<VM-IP>:0 -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock"

2 个答案:

答案 0 :(得分:1)

我没有直接引用,但是从我在Docker GitHub问题跟踪器上读到的内容来看,ICMP数据包(ping)永远不会在不同节点上的容器之间路由。

与明确打开的端口的TCP连接应该有效。但是从Docker 1.12.1开始它就是错误的。

Docker 1.12.2有一些错误修复,与其他主机上的容器建立连接。但ping不会在主机上运行。

答案 1 :(得分:1)

您只能ping同一节点上的容器,因为您将它们附加到本地范围网络。

根据评论中的建议,如果您想使用 docker swarm在主机上ping容器(意味着从 VM1 上的容器到 VM2 上的容器) (或 docker swarm模式未明确打开端口,您需要创建覆盖网络(或全局范围网络)并在该网络上分配/启动容器。

创建叠加网络:

docker network create -d overlay mynet

然后使用该网络启动容器:

  • 对于Docker Swarm模式:

    docker service create --replicas 2 --network mynet --name web nginx
    
  • 对于Docker Swarm(旧版):

    docker run -itd --network=mynet busybox
    

例如,如果我们创建两个容器(在传统的Swarm上):

docker run -itd --network=mynet --name=test1 busybox
docker run -itd --network=mynet --name=test2 busybox

您应该能够docker attach test2test1,反之亦然。

有关详细信息,请参阅networking documentation

  

注意:如果在创建覆盖网络并将容器附加到其后容器仍然无法相互ping通,请检查VM的防火墙配置并确保这些端口已打开:

     
      
  • 数据平面/ vxlan UDP 4789
  •   
  • 控制平面/ 八卦TCP/UDP 7946
  •