默认情况下,docker容器可以调用主机';是本地主机UDP吗?
我有一个docker容器,并且在VM上安装了一个守护进程,监听端口8125上的UDP。容器在此8125端口上使用UDP协议发送数据 我试图通过使用默认情况下,docker容器可以调用主机';是本地主机UDP吗?,docker,udp,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有效负
-p 8125:8125/udp
启动容器来打开端口,但出现以下错误:
Error starting userland proxy: listen udp 0.0.0.0:8125: bind: address already in use
这很有意义,因为守护进程已经在侦听此端口
那么,如何配置Docker,以便容器可以向外部守护进程发送UDP有效负载呢?只有在您想要侦听未发送的请求时,才需要打开端口。默认情况下,Docker为容器提供与主机或外部世界通信所需的网络名称空间 因此,您可以通过两种方式来实现:
docker运行中使用--net host
,并将请求发送到localhost:8125
,在这种情况下,您的容器化应用程序有效地共享了主机的网络堆栈。所以localhost指向已经在主机中运行的守护进程
172.17.0.1
)或容器中的主机名通话。然后,您可以向主机中的守护进程发送数据包在通常的设置中,容器不受发送内容的限制(作为客户端)。您只需要打开服务器端口。您应该能够将UDP数据包发送到主机(使用容器看到的主机IP,而不是“localhost”,它将发送到容器本身)。好的,因此,我一直在寻找主机上的问题,而事实上,问题来自容器内部:)感谢您澄清我有一个关于正在进行的悬赏的问题,这个问题可以准确地回答(我通过调用网关地址使用了您的第二个选项)。它不是复制品,因为它的级别更高,等等,但解决方案是您提供的Boynux。如果您想要销售代表,这里有一个链接:
--net host
应该经常被提及。似乎没有多少人知道这件事。如果您不需要端口映射,并且docker可以共享真实的localhost
,那么该标志比为容器设置整个虚拟网络(并且必须处理每个容器都有自己的localhost
)要容易得多。