我需要一个容器,在主机上有端口可用,这样它总是可以连接到同一主机名,但也有一个二级网络连接,使容器自己的局域网IP (通过macvlan)。
从技术上讲,这两者都可以在一个网络接口上实现吗?
该机器的主要接口是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‘’ed)网络接口,因此就操作系统而言,公开的端口与macvlan功能不在同一接口上。
我想我们可能需要一个类似的解决方案?增加第二个虚拟网络接口,这样我们就可以分开东西了?
发布于 2022-04-29 06:23:42
对于未来的我和其他经历过这个问题的人来说,这显然与libnetwork如何选择默认网关有关。通常情况下,这将基于接口优先级,但考虑到您不能从配置中更改优先级,他们决定使用"按字母顺序选择第一个网络“。
基本上,因为我的macvlan是之前按字母顺序排列的,所以它被选择为默认网络。因为macvlan很像主机网络,所以它不支持端口映射。因此,端口被移除。
https://stackoverflow.com/questions/72044757
复制相似问题