默认情况下,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 有效负载发送到外部守护程序呢?

仅当您

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

因此,您可以通过两种方式:

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

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

最新更新