Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker ping其他节点上的容器_Docker_Docker Swarm - Fatal编程技术网

Docker ping其他节点上的容器

Docker ping其他节点上的容器,docker,docker-swarm,Docker,Docker Swarm,我有两个虚拟机(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

我有两个虚拟机(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 run-d-p 8500:8500--name=consur progrium/consu-server-bootstrap”在VM1上创建领事容器
-在VM1上使用“docker run-d-p 3376:3376 swarm manage-H 0.0.0:3376-广告192.168.56.101:3376”创建swarm managerconsul://192.168.56.101:8500
-使用“docker run-d swarm join--Advertised:2376”在每个虚拟机上创建swarm代理consul://192.168.56.101:8500
如果我运行docker-H 0.0.0.0:3376 info,我可以看到两个节点都连接到swarm,它们都是健康的。我还可以运行container,并将它们调度到节点。但是,如果我创建一个网络并将几个节点分配给该网络,然后将SSH连接到一个节点并尝试ping其他每个节点,那么我只能访问在同一虚拟机上运行的节点

两个虚拟机都有以下DOCKER_选项:

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"
DOCKER\u OPTS=DOCKER\u OPTS=“--集群存储=consul://192.168.56.101:8500 --群集播发=:0-Htcp://0.0.0.0:2376 -Hunix:///var/run/docker.sock"

我没有直接的报价,但从Docker GitHub issue tracker上读到的内容来看,ICMP数据包(ping)从来不会在不同节点上的容器之间路由

到显式打开的端口的TCP连接应该可以工作。但从Docker 1.12.1开始,它是有车的


Docker 1.12.2修复了与其他主机上的容器建立连接时出现的一些错误。但是ping不能跨主机工作。

您只能ping同一节点上的容器,因为您将它们连接到本地作用域网络

如评论中所建议的,如果要使用docker swarm(或docker swarm模式)跨主机ping容器(即从VM1上的容器到VM2上的容器),而不显式打开端口,则需要创建一个覆盖网络(或全局范围的网络)并在该网络上分配/启动容器

要创建覆盖网络,请执行以下操作:

docker network create -d overlay mynet
然后使用该网络启动容器:

  • 对于Docker Swarm模式:

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

例如,如果我们创建两个容器(在遗留Swarm上):

您应该能够
docker将
test2
上的
attach
连接到ping
test1
,反之亦然

有关更多详细信息,请参阅

注意:如果在创建覆盖网络并将容器连接到覆盖网络后,容器仍然无法相互ping,请检查虚拟机的防火墙配置,并确保这些端口处于打开状态:

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

你创建了什么样的网络?新的VitualBox虚拟网络或docker网络?通过“docker-H 0.0.0:3376网络创建--子网=172.11.0.0/16测试网络”创建新的docker网络,我将其连接到所有节点。如果我使用ssh连接到这些节点,那么我可以只ping运行在同一虚拟机上的节点,以提供覆盖驱动程序,而不是默认网桥。那么它应该一直工作,直到得到相同的错误。网络是正确创建的,我认为,在每个节点上都有“docker network ls”,我可以看到覆盖的网络作为驱动器。在创建docker网络之前,您可以在主机上ping到另一个,而在创建之后不可以?这很奇怪,因为docker网络应该只影响容器而不影响主机。
  docker run -itd --network=mynet busybox
docker run -itd --network=mynet --name=test1 busybox
docker run -itd --network=mynet --name=test2 busybox