【发布时间】:2020-10-18 18:46:22
【问题描述】:
我正在进行一个项目,该项目旨在将现有的 VOIP 遗留系统转换为 dockerized 形式。现有系统由 5 台不同的 Linux 机器组成,每台机器都有 2 个不同的网络接口——一个暴露于公共 WAN,另一个是私有 LAN 网络。我计划创建一个 docker compose 文件来设置编排。
网络大致是这样的:
服务器 #1 Eth0:IP 192.168.0.200/24 Eth1:IP X.X.X.65/27
服务器 #2 Eth0:IP 192.168.0.201/24 Eth1:IP X.X.X.66/27
服务器 #3 Eth0:IP 192.168.0.202/24 Eth1:IP X.X.X.87/27
服务器 #4 Eth0:IP 192.168.0.203/24 Eth1:IP Y.Y.Y.240/27
服务器 #5 Eth0:IP 192.168.0.204/24 Eth1:IP Y.Y.Y.241/27
服务器 1-3 属于同一子网,服务器 4-5 也是。
我正在尝试找到将此网络设置转换为 docker 网络的最佳方法,我希望每个容器都保留他的公共 IP(Eth1 上的那个,这意味着从容器生成的流量将保持它拥有的相同公共 IP在原始服务器上),而且还能够与同一个专用网络上的所有其他 docker 容器进行通信,同时还保持它易于管理并尽可能减少开销。
我使用 docker-compose 创建了 3 个 macvlan 网络和 1 个桥接网络,但问题是 DNS 解析为每个容器提供了我在它所属的 Macvlan 网络中给它的 IP 地址,比如 2 个 docker 被分配到桥接网络和同一个 Macvlan 网络,解析彼此的容器名称将提供它们的 Macvlan 地址而不是桥接 IP 地址。我想强制所有容器之间仅通过 BRIDGE 网络进行通信(基本上将 Macvlan 网络设置为私有模式)。我怎样才能做到这一点?
【问题讨论】:
-
这和your earlier question有区别吗?是否有任何与此相关的应用程序源代码,还是纯粹是关于网络配置的问题?
-
这纯粹是网络相关的问题,它在某种程度上与我之前的问题有关,但更多地强调了 docker 如何在同一个容器上处理 2 个网络。
-
您是否考虑过将 --alias 与“docker network connect”一起使用?喜欢为桥接网络中的容器指定一个专用名称并将该名称用于内部通信?
-
@KirylZ 它可以工作,我希望有一个更优雅的解决方案。我将测试这种方法,并让您知道它是否有效。
-
另外,尝试在第一步/最后一步连接到桥接网络...它可能会更改默认网关。
标签: docker networking docker-compose centos7 macvlan