Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
默认情况下,docker容器可以调用主机';是本地主机UDP吗?_Docker_Udp - Fatal编程技术网

默认情况下,docker容器可以调用主机';是本地主机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有效负

我有一个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为容器提供与主机或外部世界通信所需的网络名称空间

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

  • 在您的
    docker运行中使用
    --net host
    ,并将请求发送到
    localhost:8125
    ,在这种情况下,您的容器化应用程序有效地共享了主机的网络堆栈。所以localhost指向已经在主机中运行的守护进程

  • 与容器网络网关(通常为
    172.17.0.1
    )或容器中的主机名通话。然后,您可以向主机中的守护进程发送数据包


  • 在通常的设置中,容器不受发送内容的限制(作为客户端)。您只需要打开服务器端口。您应该能够将UDP数据包发送到主机(使用容器看到的主机IP,而不是“localhost”,它将发送到容器本身)。好的,因此,我一直在寻找主机上的问题,而事实上,问题来自容器内部:)感谢您澄清我有一个关于正在进行的悬赏的问题,这个问题可以准确地回答(我通过调用网关地址使用了您的第二个选项)。它不是复制品,因为它的级别更高,等等,但解决方案是您提供的Boynux。如果您想要销售代表,这里有一个链接:
    --net host
    应该经常被提及。似乎没有多少人知道这件事。如果您不需要端口映射,并且docker可以共享真实的
    localhost
    ,那么该标志比为容器设置整个虚拟网络(并且必须处理每个容器都有自己的
    localhost
    )要容易得多。