将Docker容器连接到网络接口/设备而不是IP地址

问题描述:

经过仔细研究,测试和摆弄之后,我只能通过从IP转发来找到将Docker容器连接到给定接口的方法/港口。这可以通过将-p Host-IP:Host-Port:Container-Port添加到docker run命令来完成。将Docker容器连接到网络接口/设备而不是IP地址

我有一个应用程序,侦听UDP广播(255.255.255.255),并且一直无法配置转发的方式,使得我的容器将接收这些广播而不转发我关心的端口上的所有网络通信(无通过它来的接口),即:-p Host-Port:Container-Port

可以使用--net=host配置容器,只需编写我的代码以绑定到我已完成并测试的给定接口,但仍然违背容器的主要思想。目标是让同一应用程序的多个容器在不同的网络接口上进行监听(如设备中的地址)。

有关我如何做到这一点的任何想法?

编辑#1:在考虑了这一点之后,有可能在所需的接口上设置网桥就足够了,但我不相信操作系统通过它发送广播数据包。随着我执行更多测试,请继续关注。

编辑#2:数据包通过桥发送就好了。但是,网桥被配置为Docker默认网桥。我一直无法弄清楚如何在不同的网桥上运行容器。看了一些笔记,指向将网络设置为--net=none并通过lxc容器设置自行配置它。

+0

为什么泊坞窗桥不够好? – 2015-02-22 02:28:34

+0

无法以我可以指定要连接的网络接口的方式配置泊坞桥。这意味着我无法为每个网络接口分开容器。 – tryexceptpass 2015-02-23 16:09:57

+1

你可以发布你的解决方案吗?我需要类似的东西在Docker容器内部运行DHCP实例 – 2015-12-21 21:13:51

默认情况下,docker run命令会为tcp发布端口。 尝试指定使用UDP:

docker run -p Host-Port:Container-Port/UDB ...

+1

问题不在于转发端口,它是从特定接口转发数据。 – tryexceptpass 2015-03-14 18:45:34

+0

你想转发什么接口? – 2015-03-16 10:12:59

+1

在这种情况下,我使用“接口”一词来表示网络设备。 如果我有一个双宿主系统,我只想在其中一个网络上提供服务,我还没有找到办法做到这一点。在我使用广播或多播数据包的情况下,从特定IP转发数据是不够的。 – tryexceptpass 2015-03-19 23:02:07