在运行在Docker for Windows上的Docker容器中公开的端口上没有接收到UDP通信。 如何debugging?

我有一个Node.js应用程序,我将其打包到创buildFROM node:6的Docker映像中FROM node:6 (A)或FROM hypriot/rpi-node:6创build的映像FROM hypriot/rpi-node:6 (B)。

应用程序从端口43210读取UDP消息,并通过端口4000上的TCP进行通信。因此,在运行两个映像(使用/udp后缀的UDP端口)时,相应的端口都是暴露的。

在RaspberryPi上运行容器B时,一切正常。 但是,在Windows 10 Pro上运行带有Docker for Windows最新版本的容器A时,应用程序不会收到任何UDP消息(Docker for Windows 17.03.0-ce-win1(10296))。

如果我通过docker port <container name>列出暴露的端口,我得到:

 4000/tcp -> 0.0.0.0:4000 43210/udp -> 0.0.0.0:43210 ... some other exposed ports 

我尝试通过从另一台机器发送包到Windows主机来debuggingUDPstream量,如下所示:

 "random message" | nc -u -w1 <win-host-ip> 43210 

并通过以下方式在docker集装箱中收听:

 docker exec <container-name> tcpdump -i eth0 udp dst port 43210 

这个testing在检查TCPstream量(例如在端口4000上)时工作正常。但是,我发现检查UDPstream量对于上面的testing甚至对于使用容器B(工作)的设置都是行不通的(tcpdump没有收到任何东西)。

将RaspberryPi运行映像B连接到真正的UDPstream量源并使用docker exec <container-name> tcpdump -i eth0 udp dst port 43210 ,我得到了很多输出:

 18:51:22.314746 IP 192.168.42.1.51024 > 5e60d00b6b07.43210: UDP, length 13 18:51:22.453839 IP 192.168.42.1.51024 > 5e60d00b6b07.43210: UDP, length 35 18:51:22.473694 IP 192.168.42.1.51024 > 5e60d00b6b07.43210: UDP, length 23 

因此,我的问题是:

  1. 任何提示,为什么在Docker for Windows上运行的容器没有收到UDPstream量?
  2. 有关如何在外部将UDPstream量debugging到Windows上的Docker容器的任何build议?