无法通过docker consul在另一台主机上ping容器

我有3个CentoS 7机器。 我试图build立一个cassandra集群。 一个cassandra节点可以发现所有其他节点,如果它们在同一个networking中,所以我正在寻找一种方法来在不同的主机上build立两个容器,但是仍然使它们像在同一个networking中一样工作。

我试图与领事在以下步骤:

  1. 在machine0上创build一个consul容器:

    docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

  2. 将consulconfiguration添加到machine1和machine2中的/lib/systemd/system/docker.service

    -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://*machine0-external-ip*:8500/network --cluster-advertise=machine0-external-ip:2375 --userland-proxy=false \

  3. 创build覆盖networkingdocker network create -d overlay --subnet=10.10.10.0/24 testNetwork

  4. 在machine1和machine2上创buildbusybox容器,使用我的testingnetworkingmachine1 docker run -itd --name container1 --net testNetwork busybox machine2- docker run -itd --name container2 --net testNetwork busybox

  5. 从任一台机器(1或2),我都可以通过这个命令docker network inspect testNetworknetworking看到networking中的容器, docker network inspect testNetwork结果是:

     { "Name": "testNetwork", "Id": "12020d9c66762dcf4db74cb44ffed2fe8f9e3eb531fe5e4e3f16640185154447", "Scope": "global", "Driver": "overlay", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "10.10.10.0/24" } ] }, "Internal": false, "Containers": { "c704cdedf845507891ea25ece4536e35a8984ffc98850d44fd6520e1954a203a": { "Name": "container1", "EndpointID": "345a3895f6480eecaa3e03f83ff021197a3241ebedca5cb635c06f8a83d259d6", "MacAddress": "02:42:0a:0a:0a:02", "IPv4Address": "10.10.10.2/24", "IPv6Address": "" }, "ep-c507d3c94db20b519da28319bcb07e63297d2f2c12c0fdd52e88807bbb255743": { "Name": "container2", "EndpointID": "c507d3c94db20b519da28319bcb07e63297d2f2c12c0fdd52e88807bbb255743", "MacAddress": "02:42:0a:0a:0a:03", "IPv4Address": "10.10.10.3/24", "IPv6Address": "" } }, "Options": {}, "Labels": {} 

    }

  6. 尝试ping container1内的container2 docker exec container1 ping -w 3 container2 。 这导致

     PING container2 (10.10.10.3): 56 data bytes --- container2 ping statistics --- 3 packets transmitted, 0 packets received, 100% packet loss 

你可以看到ping是去的子网地址(10.10.10.3),这是我想要的。

我究竟做错了什么?

据我了解,容器应该通过自动networkingdocker_gwbridge 。 为了知道这个子网是真实的(在不同的机器上),我在包上运行了一个嗅探器,看起来容器只是在内部networking中查找这个地址,甚至没有通过docker_gwbridge

如果有人对我的问题有不同的方法或build议,我很乐意听到它!

提前致谢!

我不明白你在这里与领事达成什么目标,因为你显然没有在你的方法中使用它。 你可以看看我的答案在下面的post,以获得更多的清晰度:

我的docker图片是否需要自己的领事客户端实例?

希望它给一些清晰。