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

Docker 从主机发送udp数据包可以正常工作,但不能从容器发送,docker,udp,containers,statsd,datadog,Docker,Udp,Containers,Statsd,Datadog,如果我在主机(ubuntu)上运行此命令 它发送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:2

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

它发送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

我做错什么了吗?

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

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

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

EXPOSE 8125/udp