我有一个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有效负载发送到外部守护进程?
只有在您想要侦听未发送的请求时才需要打开端口.默认情况下,Docker为容器提供必要的网络命名空间,以便与主机或外部世界进行通信.
所以,你可以用两种方式:
--net host
在你的使用docker run
和发送请求,localhost:8125
在这种情况下,您的容器化应用程序有效地共享主机的网络堆栈.因此localhost指向已在主机中运行的守护程序.
与容器网络网关(通常是172.17.0.1
)或您的容器中的主机主机名进行通信.然后您就可以将数据包发送到主机中的守护程序.