默认情况下,docker容器可以调用主机的本地主机UDP?

我有一个docker容器,并且在虚拟机上安装了一个在端口812上侦听UDP的守护进程。容器在这个8125端口上使用UDP协议发送数据。

我试图通过启动容器与-p 8125:8125/udp打开端口,但我得到以下错误:

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

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

那么如何configurationDocker,使容器可以发送UDP负载到外部守护进程?

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

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

  1. 在你的--net host docker run使用--net host ,并发送请求到localhost:8125在这种情况下,你的集装箱化的应用程序是有效地共享主机的networking堆栈。 所以本地主机指向已经在主机上运行的守护进程。

  2. 与容器networking网关(通常是172.17.0.1 )或您的主机的主机名称对话。 然后你可以发送数据包到你的主机的守护进程。