从外部容器向docker上的statsd /石墨数据库发送数据时遇到问题

时间:2019-07-13 00:24:45

标签: docker graphite statsd

在将数据发送到statsd容器中时遇到问题。我可以在容器本身内部的命令行上成功发送数据。我需要能够从主机或另一个Docker容器向其发送统计数据。

我正在使用Kitematic,可以看到在两个容器上都选中了“桥接”网络选择。我发现此问题是使用桥接网络的建议。

我还尝试在运行命令以构建容器时将'-P'传递给Docker,因为这本应公开端口。从其他容器发送数据时,我没有注意到它的行为方式有所不同。

在本地主机上使用端口8125创建虚假统计信息的代码示例(取自此Docker容器网页https://hub.docker.com/r/graphiteapp/graphite-statsd

  

让我们使用随机计数器来伪造一些统计数据以证明一切正常。

while true; do echo -n "example:$((RANDOM % 100))|c" | nc -w 1 -u     127.0.0.1 8125; done

使用以下命令创建容器:

docker run -d --name graphite --restart=always -p 80:80 -p 2003-2004:2003-2004 -p 2023-2024:2023-2024 -p 8125:8125/udp -p 8126:8126 graphiteapp/graphite-statsd

我尝试确保两者都在同一个“网桥”网络上。我正在Windows 10企业版上运行Docker桌面。我已经找到了几个在Linux上处理iptables和网络的命令,但是我感觉好像丢失了一些东西。我可能还会提到,默认情况下,statsd在端口8125上使用UDP连接。

如果我尝试从网桥网络上的另一个容器运行示例命令,则不会得到任何结果。我知道(来自另一个容器的)数据无法正确传递,因为在statsd仪表板上收到的指标中看不到数据。

我可以ping localhost:8125并从另一个容器中获得响应。从外部(主机上的Powershell窗口)将无法解析。

 PING localhost:8125 (127.0.0.1): 56 data bytes
 64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.024 ms
 64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.052 ms
 64 bytes from 127.0.0.1: seq=2 ttl=64 time=0.031 ms
 ^C
 --- localhost:8125 ping statistics ---
 3 packets transmitted, 3 packets received, 0% packet loss
 round-trip min/avg/max = 0.024/0.035/0.052 ms>

如果我运行docker container ls,则会得到以下信息:

updated container ls screenshot

1 个答案:

答案 0 :(得分:0)

我发现我需要获取每个容器的特定IP地址,可以通过运行docker inspect (name of network)找到该IP地址。在这种情况下,bridge

然后我需要指定容器的IP地址。我用该IP地址替换了建议的地址,然后它起作用了。

container reachable from another on the bridge network