Docker Consul在单个VM设置中的多个容器

时间:2016-11-07 17:10:06

标签: docker containers consul

我用来旋转consul容器的Docker命令 -

  1. 为容器1创建静态Ip = docker network create --subnet=172.18.0.0/16 C1

  2. 运行一个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

  3. 类似地为包含2创建静态Ip - docker network create --subnet=172.19.0.0/16 C2

  4. 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

  5. IP 172.19.0.10:8301的consul容器test2无法与172.18.0.10:8301闲聊。我收到了No Acknowledgement收到的消息。

    我还尝试使用--link链接两个容器。但那没用。

    如果我做的一切正确,有人能告诉我吗?

1 个答案:

答案 0 :(得分:1)

在docker守护程序上创建用户定义的网络时,您必须注意这些网络的某些属性。

  

网络中的每个容器都可以立即与网络中的其他容器通信。但是,网络本身隔离容器与外部网络。 Docker documentation

有效地说明了你的体验。容器无法相互通信,因为它们彼此隔离(驻留在不同的网络中)。

--link时,用户定义的网络不支持它。

  

在用户定义的网桥中,不支持链接。 Docker documentation

解决方案是简单地将两个容器放在同一个网络中。我没有看到显然需要使用您描述中的两个不同的网络。只需为第二个使用不同的--ip