我用来旋转consul容器的Docker命令 -
为容器1创建静态Ip = docker network create --subnet=172.18.0.0/16 C1
运行一个consul容器到那个Ip:
docker run -d --net C1 --ip 172.18.0.10 -p 48301:8301/tcp -p 48400:8400/tcp -p 48600:8600/tcp -p 48300:8300/tcp -p 48302:8302/tcp -p 48302:8302/udp -p 48500:8500/tcp -p 48600:8600/udp -p 48301:8301/udp --name=test1 consul agent -client=172.18.0.10 -bind=172.18.0.10 -server -bootstrap -ui
类似地为包含2创建静态Ip - docker network create --subnet=172.19.0.0/16 C2
docker run -d --net C2 --ip 172.19.0.10 -p 58301:8301/tcp -p 58400:8400/tcp -p 58600:8600/tcp -p 58300:8300/tcp -p 58302:8302/tcp -p 58302:8302/udp -p 58500:8500/tcp -p 58600:8600/udp -p 58301:8301/udp --name=test2 consul agent -client=172.19.0.10 -bind=172.19.0.10 -server -bootstrap -ui -join 192.168.99.100:48301
IP 172.19.0.10:8301的consul容器test2无法与172.18.0.10:8301闲聊。我收到了No Acknowledgement收到的消息。
我还尝试使用--link链接两个容器。但那没用。
如果我做的一切正确,有人能告诉我吗?
答案 0 :(得分:1)
在docker守护程序上创建用户定义的网络时,您必须注意这些网络的某些属性。
网络中的每个容器都可以立即与网络中的其他容器通信。但是,网络本身隔离容器与外部网络。 Docker documentation
有效地说明了你的体验。容器无法相互通信,因为它们彼此隔离(驻留在不同的网络中)。
到--link
时,用户定义的网络不支持它。
在用户定义的网桥中,不支持链接。 Docker documentation
解决方案是简单地将两个容器放在同一个网络中。我没有看到显然需要使用您描述中的两个不同的网络。只需为第二个使用不同的--ip
。