映射端口 + macvlan 问题

Mapped ports + macvlan woes

我需要一个容器在主机上有可用的端口,这样它就可以始终连接到相同的主机名,而且还需要一个辅助网络连接,为容器提供自己的 LAN IP(通过 macvlan)。

这两个在 1 个网络接口上在技术上是否可行?

机器的主接口是 fbond0,macvlan 网络是在该接口之上创建的:

docker network create -d macvlan --subnet 10.123.56.0/22 --ip-range=10.123.59.64/27 -o macvlan_mode=bridge -o parent=bond25g macvlan214

当容器使用端口映射正常启动时,它按预期工作:

PORTS                                                              
0.0.0.0:49215->22/tcp, 0.0.0.0:49216->5000/tcp           

一旦连接到第二个网络:

PORTS
22/tcp, 5000/tcp

断开连接后,我们得到新的映射:

PORTS
0.0.0.0:49217->22/tcp, 0.0.0.0:49218->5000/tcp

我们已经在另一台服务器上使用了此设置,但由于该服务器在相关 VLAN 之外,因此添加了一个(经过 VLAN 处理的)网络接口,因此暴露的端口与 macvlan 不在同一接口上就 OS 而言的功能。

我假设我们可能需要一个类似的解决方案?添加第二个虚拟网络接口以便我们可以分开?

对于我和其他遇到此问题的人来说,显然这与 libnetwork 选择默认网关的方式有关。通常这将基于接口优先级,但鉴于您无法从配置中更改优先级,他们决定使用“choosing the first network in alphabetically order”。

基本上,因为我的 macvlan 按字母顺序排列较早,所以它被选为默认网络。因为 macvlan 很像主机网络,它不支持端口映射。因此端口被删除。