不同的Docker 1.9网络相互通信?

时间:2015-11-28 03:11:13

标签: networking docker

我想创建两个Docker 1.9网络。网络A运行Web服务器,应用程序服务器和Postgres服务器(所有容器)。网络B运行SMTP服务器和其他容器。我需要网络A上的容器才能进入网络B.是否可能?

1 个答案:

答案 0 :(得分:3)

libnetwork implementation包含叠加模式:

  

覆盖驱动程序使用覆盖网络封装(如VXLAN)实现可跨多个主机的网络。有关其设计的更多详细信息,请参阅Overlay Driver Design

     

新的原生覆盖网络驱动程序支持本机开箱即用的多主机网络   这种支持是在libnetwork,内置的基于VXLAN的覆盖网络驱动程序和Docker的libkv库的帮助下完成的。

This tutorial 解释了如果容器在不同的计算机上,即使它们已注册到同一个覆盖网络,如何使容器相互通信。

这将涉及首先设置K / V(键/值)商店:

https://github.com/docker/dceu_tutorials/raw/master/images/tut6-step1.png

  

现在您的三个节点已配置为使用键值存储,您可以在任何节点上创建覆盖网络。创建网络时,会将其分发到所有节点。

     

当您在任何主机上创建第一个覆盖网络时,Docker还会在每个名为docker_gwbridge的主机上创建另一个网络。 Docker使用此网络为容器提供外部访问。

     

覆盖网络中的每个容器也会在eth中获得docker_gwbridge接口,允许容器访问外部世界。
  docker_gwbridge类似于Docker的默认bridge网络,但与bridge不同,它限制了容器间通信(ICC)。
  无论存在多少个覆盖网络,Docker都会为每个主机创建一个docker_gwbridge网桥。

     

对于属于RED覆盖网络的每个容器,Docker为/etc/hosts添加了一个条目   因此,要从container2到达container1,您只需使用其名称即可。当容器与覆盖网络连接和断开连接时,Docker会自动更新/etc/hosts

https://github.com/docker/dceu_tutorials/raw/master/images/tut6-step6.png

  

此时,container2container3可以通过RED覆盖网络进行通信。
  它们都在同一个docker_gwbridge但是在没有主机端口映射的情况下无法使用该桥接网络进行通信。 docker_gwbridge用于所有其他流量。