如果我在主机(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
我做错什么了吗?
答案 0 :(得分:0)
EXPOSE
不会将容器端口发布到主机。它更多地用于记录意图,被认为是良好实践。然后,通常您也需要发布端口(例如--publish=8125:8125
)。
但是,您想获得相反的结果-IIUC-并使容器的主机端口可访问。一种执行此操作的方法是使用--net=host
运行容器。然后,您的容器可以访问主机的8125
端口。
而且,如果您确实想访问容器的任何端口,则可以使用发布 而无需访问。