【问题标题】:Connecting a Docker container to a network interface / device instead of an IP address将 Docker 容器连接到网络接口/设备而不是 IP 地址
【发布时间】:2015-02-06 01:46:54
【问题描述】:

经过仔细研究、测试和摆弄,我只能通过从 IP/端口转发来将 Docker 容器连接到给定接口。这可以通过将-p Host-IP:Host-Port:Container-Port 添加到docker run 命令来完成。

我有一个侦听 UDP 广播 (255.255.255.255) 的应用程序,并且无法配置转发以使我的容器在不转发我关心的端口上的所有网络流量的情况下接收这些广播(无论通过哪个接口进来),即:-p Host-Port:Container-Port.

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

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

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

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

【问题讨论】:

  • 为什么docker桥不够好?
  • 无法以我可以指定要附加到哪个网络接口的方式配置 docker 网桥。这意味着每个网络接口我不能有单独的容器。
  • 您能发布您的解决方案吗?我需要类似的东西在 docker 容器中运行 DHCP 实例

标签: udp docker broadcast raw-sockets


【解决方案1】:

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

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

【讨论】:

  • 问题不是转发端口,而是从特定接口转发数据。
  • 你要转发什么接口?
  • 在这种情况下,我使用“接口”一词来表示网络设备。如果我有一个双宿主系统并且我只想在其中一个网络上提供服务,我还没有找到一种方法来做到这一点。在我使用广播或多播数据包的情况下,从特定 IP 转发数据是不够的。
最近更新 更多