默认情况下,docker容器可以调用host的localhost UDP吗?

时间:2017-05-14 07:43:02

标签: docker udp

我有一个docker容器,并且还在VM上安装了一个守护程序,用于侦听端口8125上的UDP。容器在此8125端口上使用UDP协议发送数据。

我试图通过使用-p 8125:8125/udp启动容器来打开端口,但是我收到以下错误:

Error starting userland proxy: listen udp 0.0.0.0:8125: bind: address already in use

这是有道理的,因为守护程序已经在侦听此端口。

那么如何配置Docker以便容器可以将UDP有效负载发送到外部守护进程?

1 个答案:

答案 0 :(得分:6)

只有在您想要侦听未发送的请求时才需要打开端口。默认情况下,Docker为容器提供必要的网络命名空间,以便与主机或外部世界进行通信。

所以,你可以用两种方式:

  1. docker run中使用localhost:8125并向172.17.0.1发送请求,在这种情况下,您的容器化应用有效地共享主机的网络堆栈。因此localhost指向已在主机中运行的守护程序。

  2. 与容器中的容器网络网关(通常为{{1}})或主机的主机名进行通信。然后,您就可以将数据包发送到主机中的守护程序。