当前位置: 首页 > 知识库问答 >
问题:

从主机发送udp数据包可以正常工作,但不能从容器发送

臧曜瑞
2023-03-14

如果我在主机上运行这个命令(ubuntu)

echo "PD.file.processing:1|c" | nc -w 1 -u localhost 8125

它发送udp数据包,端口8125上运行的dogstatsd代理将其接收,我可以看到它。但是,当我在同一台主机上的docker容器上运行以下命令时,这里是执行docker ps时容器的端口映射

8125/udp, 0.0.0.0:20019->8080/tcp, 0.0.0.0:20018->8443/tcp, 0.0.0.0:20017->11400/tcp, 0.0.0.0:20016->11401/tcp, 0.0.0.0:20015->11402/tcp

echo "MD.file.returned.success:1|c" | nc -w 1 -u 172.17.0.1 8125

这不会击中主机,也不会被8125上主机上运行的dogstatsagent捕获。这是Dockerfile中的代码公开行

EXPOSE 8125/udp

我做错什么了吗?

共有1个答案

欧奇希
2023-03-14

EXPOSE不向主机发布容器端口;它更多地用于记录意图,被认为是良好的实践。然后通常也需要发布端口(例如,--publish=8125:8125)。

但是,您希望实现反向IIUC并使容器可以访问主机的端口。您可以这样做的一种方法是使用--net=host运行容器。然后,您的容器可以访问主机的8125端口。

而且,如果您确实想访问容器的任何端口,则可以不使用publish来访问。

 类似资料:
  • 问题内容: 即使已经存在一个类似的主题,我也注意到它可以追溯到两年前,因此我认为打开一个新主题更为合适。 我试图弄清楚如何从Linux内核(3.3.4)发送UDP数据包,以便监视随机数生成器(/drivers/char/random.c)的行为。到目前为止,由于sock_create和sock_sendmsg函数,我已经设法监视了一些事情。您可以在此消息的末尾找到我使用的典型代码。(您可能还希望在

  • 我创建了某种类型的客户机/服务器应用程序,它有自己的数据ACK系统。由于某些限制,它最初是用TCP编写的,但它的基础是考虑到UDP编写的。 我发送到服务器的数据包有自己的封装(数据包id和数据包大小报头。我知道UDP还有一个校验和,所以我没有为此添加报头),但是TCP是如何工作的,我知道服务器可能接收不到整个数据包,所以我收集并缓冲了接收到的数据,直到收到一个完整的有效数据包。 我想知道的是:如果

  • 我们有一个场景,(UDP客户端程序)向(UP服务器)发送UDP数据包 TCP在数据通信开始之前和结束之后执行握手。UDP没有。 那么,运行在上的应用程序失败的原因是否是上的服务器程序没有准备好(关闭)接收UDP数据包?

  • 我正在Cooja中运行一个模拟。我的模拟只有2个motos:一个rpl边界路由器,一个rpl udp-server。我使用的是Contiki中给出的示例代码:bord-router. c和udp-server. c。 我正在使用“tunslip6”工具在moto和我的本地机器(在Ubuntu 18.04上运行)之间建立一个桥梁。现在,我想访问rpl udp服务器moto,并希望从本地计算机获得回复

  • 我可以从主机发送邮件,使用邮件: 但我想使用主机服务器从docker容器发送邮件。在运行命令中,当我尝试将端口映射到25端口时,Docker说“端口已在使用中”: 我怎样才能达到目标?主机是Centos,docker使用Ubuntu。