Docker容器:与其他主机的UDP通信

时间:2019-01-25 06:59:30

标签: python docker quadprog

我正在编写一个python应用程序,该应用程序将UDP消息连续发送到具有其他主机和固定IP的预定义网络。我编写了python应用程序并对其进行了docker化。该应用程序在docker中工作正常,在那里没有问题。

不幸的是,我未能将UDP消息从我的泊坞窗发送到主机,因此它们将被发送到网络中的其他主机。接收消息也是如此。现在,我不知道如何设置泊坞窗,因此它正在从网络中具有固定IP地址的主机接收UDP消息。

我尝试使用--net host建立我的Docker网络,并通过本地主机将Docker容器中的所有UDP消息发送到了主机。这也很好。我丢失了可以将消息否发送到“外部世界”的链接。我试图给我的问题做个图片。

Docker host communication problem

我的问题:我如何为我的docker / host设置网络通信,以便它可以通过UDP从网络中的其他主机接收消息? 谢谢

2 个答案:

答案 0 :(得分:0)

建立自己的桥梁

1。配置新的网桥。

$ sudo ip link set dev br0 up

$ sudo ip addr add 192.168.5.1/24 dev bridge0

$ sudo ip link set dev bridge0 up

确认新桥的设置。

$ ip addr show bridge0

4: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group default
    link/ether 66:38:d0:0d:76:18 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.1/24 scope global bridge0
       valid_lft forever preferred_lft forever <br/>       

2。通过在daemon.json文件中设置选项,将Docker配置为使用新桥,该文件位于Linux上的/etc/docker/或Windows Server上的C:\ProgramData\docker\config\中。在Mac的Docker或Windows的Docker上,单击Docker图标,选择首选项,然后转到 Daemon

如果daemon.json文件不存在,请创建它。假设文件中没有其他设置,则该文件应具有以下内容:

{
  "bridge": "bridge0"
}

重新启动Docker以使更改生效。

3.确认已设置新的传出NAT伪装。

    $ sudo iptables -t nat -L -n

    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination
    MASQUERADE  all  --  192.168.5.0/24      0.0.0.0/0

4。删除现在未使用的docker0网桥。

$ sudo ip link set dev docker0 down

$ sudo ip link del name br0

$ sudo iptables -t nat -F POSTROUTING

5。创建一个新的容器,并确认它在新的IP地址范围内。

ref。)

答案 1 :(得分:0)

因此,我做了很多实验,然后发现,我只需要运行以网络配置为主机的docker容器即可。容器中的UDP套接字绑定到主机的IP地址,因此只需链接到主机的网络即可。每个在同一问题上苦苦挣扎的人,只要奔跑

docker run --network=host <YOURCONTAINER>