我有3台CentoS 7机器。 我试图建立一个cassandra集群。 如果cassandra节点位于同一网络中,它可以发现所有其他节点,因此我一直在寻找一种方法在不同的主机上设置2个容器,但仍然使它们像在同一网络中一样工作。
我尝试通过以下步骤与领事进行:
在machine0上创建一个consul容器:
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
将consul配置添加到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 \
创建叠加网络docker network create -d overlay --subnet=10.10.10.0/24 testNetwork
使用我的测试网络machine1- docker run -itd --name container1 --net testNetwork busybox
machine2- docker run -itd --name container2 --net testNetwork busybox
从任一台机器(1或2)我都可以通过此命令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": {}
}
尝试从container1 docker exec container1 ping -w 3 container2
内部ping容器2。这导致
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),这就是我想要的。
我做错了什么?
根据我的理解,容器应该通过自动处理网络docker_gwbridge
。为了知道这个子网在哪里是真实的(在不同的机器上)我在数据包上运行了一个嗅探器,看起来容器只是在他的内部网络中查找该地址而且甚至没有通过docker_gwbridge
...
如果有人对我的问题采取不同的方法或建议,我很乐意听到它!
提前致谢!
答案 0 :(得分:0)
我无法理解你在这里与领事达成的目标,因为你显然没有在你的方法中使用它。您可以在以下帖子中查看我的答案,以便更清楚地了解它:
Does my docker images need its own consul client instances?
希望它能提供一些清晰度。