我想创建两个Docker 1.9网络。网络A运行Web服务器,应用程序服务器和Postgres服务器(所有容器)。网络B运行SMTP服务器和其他容器。我需要网络A上的容器才能进入网络B.是否可能?
答案 0 :(得分:3)
libnetwork implementation包含叠加模式:
覆盖驱动程序使用覆盖网络封装(如VXLAN)实现可跨多个主机的网络。有关其设计的更多详细信息,请参阅Overlay Driver Design。
新的原生覆盖网络驱动程序支持本机开箱即用的多主机网络 这种支持是在libnetwork,内置的基于VXLAN的覆盖网络驱动程序和Docker的libkv库的帮助下完成的。
This tutorial 解释了如果容器在不同的计算机上,即使它们已注册到同一个覆盖网络,如何使容器相互通信。
这将涉及首先设置K / V(键/值)商店:
现在您的三个节点已配置为使用键值存储,您可以在任何节点上创建覆盖网络。创建网络时,会将其分发到所有节点。
当您在任何主机上创建第一个覆盖网络时,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
。
此时,
container2
和container3
可以通过RED
覆盖网络进行通信。
它们都在同一个docker_gwbridge
但是在没有主机端口映射的情况下无法使用该桥接网络进行通信。docker_gwbridge
用于所有其他流量。