Docker: 强制内部容器在网络上通信

Docker: Force inner container communication on network

我正在进行一个将现有 VOIP 遗留系统转换为 docker 化形式的项目。现有系统由 5 台不同的 Linux 机器组成,每台机器有 2 个不同的网络接口 - 一个暴露于 public WAN,另一个是私有局域网。我计划创建一个 docker 撰写文件来设置编排。

网络大致是这样的:

服务器 #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 网络的最佳方法,我希望每个容器都保留他的 public IP(Eth1 上的那个,这意味着从容器将保持与原始服务器上相同的 public IP),但也能够与同一私有网络上的所有其他 docker 容器通信,同时保持易于管理和拥有尽可能少的开销。

我已经使用 docker-compose 创建了 3 个 macvlan 网络和 1 个桥接网络,但问题是 DNS 解析为每个容器提供了我在它所属的 Macvlan 网络中给它的 IP 地址,假设 2 dockers 被分配给桥接网络和同一个 Macvlan 网络,解析彼此的容器名称将提供它们的 Macvlan 地址而不是桥接 IP 地址。我想强制所有容器之间仅通过 BRIDGE 网络进行通信(基本上将 Macvlan 网络设置为专用模式)。我该如何实现?

考虑将 --alias"docker network connect" 一起使用。就像在桥接网络中为容器指定一个专用名称并将该名称用于内部通信