我遇到了一个有关docker中网络配置的大问题。感觉是这样的:
1。我的服务中有两个eth:eth0和eth1:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.198.172 netmask 255.255.255.0 broadcast 172.17.198.255
inet6 fe80::250:56ff:fea8:233f prefixlen 64 scopeid 0x20
ether 00:50:56:a8:23:3f txqueuelen 1000 (Ethernet)
RX packets 5415657 bytes 2659904664 (2.4 GiB)
RX errors 0 dropped 78 overruns 0 frame 0
TX packets 935762 bytes 1824232555 (1.6 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.251.6.68 netmask 255.255.255.0 broadcast 10.251.6.255
inet6 fe80::250:56ff:fea8:1778 prefixlen 64 scopeid 0x20
ether 00:50:56:a8:17:78 txqueuelen 1000 (Ethernet)
RX packets 4954017171 bytes 349830337818 (325.8 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 66380998 bytes 4647495138 (4.3 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2。eth0是默认的网络接口。 eth1是支持多播的接口。它在多播模式下接收和发送消息。
3。现在,我使用以下命令创建一个容器: docker run -it -p 8181:8181 centos bash
4。据我的理解,eth0和eth1这两个接口将全部桥接到容器中的veth0。所以我的问题是:
<1>如果eth0和eth1都与veth0桥接,那么veth0如何从两个eths(eth0和eth1)接收ip数据包 <2>如果我的理解是错误的,码头工人只会将eth0桥接到veth0。如何在容器内将eth1桥接到veth1,以便容器可以通过eth1到veth1从物理网络接收多播数据包。 非常感谢 !这个问题困扰了我很长时间。如果您有任何想法或疑问,请在此处发表评论。谢谢!
答案 0 :(得分:1)
我认为目前不支持此功能。最好的选择可能是禁用Docker的网络命名空间并使用--net host
。请注意,这使容器可以直接访问主机接口,并且您需要通过已发布的端口进行连接才能访问其他容器。
您可以通过以下方法关注当前状态:https://github.com/moby/moby/issues/23659