【问题标题】:sending a udp packet from host works but not from container从主机发送 udp 数据包可以工作,但不能从容器发送
【发布时间】:2018-08-16 01:16:02
【问题描述】:

如果我在主机(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

我做错了吗?

【问题讨论】:

    标签: docker udp containers statsd datadog


    【解决方案1】:

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

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

    而且,如果您确实想要访问容器的任何端口,则可以在不使用发布的情况下这样做。

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 2015-12-22
      相关资源
      最近更新 更多