我有两个虚拟机( IP为192.168.56.101的VM1和IP为192.16.56.102的VM2,它们可以相互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,我可以看到两个节点都连接到群,并且它们都是健康的。我也可以运行容器,它们被调度到节点上。但是,如果我创建一个网络并将几个节点分配给这个网络,然后将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"发布于 2016-09-27 15:51:29
我没有直接引用,但从我在Docker问题跟踪器上读到的内容来看,GitHub数据包(ping)从不在不同节点上的容器之间路由。
到显式打开的端口的TCP连接应该起作用。但是从Docker 1.12.1开始,它是有But的。
Docker 1.12.2修复了与其他主机上的容器建立连接的wrt。但是ping不能跨主机工作。
发布于 2016-11-21 22:20:13
您只能对同一节点上的容器执行ping操作,因为您将它们附加到本地作用域网络。
正如注释中所建议的,如果您要使用坞站群(或坞站群模式)在不显式打开端口的情况下跨主机ping容器(即从VM1上的容器到VM2上的容器),则需要创建覆盖网络(或全局范围网络),并在该网络上分配/启动容器。
创建覆盖网络的步骤:
docker network create -d overlay mynet然后使用该网络启动容器:
用于Docker群模式的
docker服务创建--副本2--网络mynet --名称web nginx
用于Docker群的
docker运行网络-itd =mynet busybox
例如,如果我们创建了两个容器(在传统的Swarm上):
docker run -itd --network=mynet --name=test1 busybox
docker run -itd --network=mynet --name=test2 busybox您应该能够在test2上docker attach通test1,反之亦然。
有关更多详细信息,请参阅networking documentation。
备注:如果在创建覆盖网络并将容器附加到覆盖网络后,容器仍然无法相互ping通,请检查VM的防火墙配置,并确保这些端口已打开:
UDP 4789
TCP/UDP 7946
https://stackoverflow.com/questions/38683048
复制相似问题