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

Ove*_*ivr 1 udp docker

我有一个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
Run Code Online (Sandbox Code Playgroud)

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

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

Boy*_*nux 6

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

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

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

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

  • 应该更频繁地提到`--net host`。似乎没有多少人知道它。如果您不需要端口映射并且可以使用 docker 共享真正的“localhost”,那么该标志比为容器设置整个虚拟网络要容易得多(并且必须处理每个容器都有自己的“localhost”) . (2认同)