docker - 从外部容器向 docker 上的 statsd/graphite 数据库发送数据时出现问题
问题描述
我在将数据发送到 statsd 容器时遇到问题。我可以在容器本身的命令行上成功发送数据。我需要能够从主机或另一个 Docker 容器向它发送统计数据。
我正在使用 Kitematic,我可以看到在两个容器上都检查了“桥”网络的选择。使用桥接网络是我为这个问题找到的建议。
我还尝试在运行命令来构建容器时将“-P”传递给 Docker,因为这应该暴露端口。从另一个容器发送数据时,我没有注意到它的行为方式有什么不同。
使用 localhost 上的端口 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 Enterprise 上运行 Docker Desktop。我在 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
,我会得到以下信息:
解决方案
推荐阅读
- google-cloud-firestore - Firestore 中的 UPDATE_NOOP 是什么?
- flutter - Flutter 中是否有“BroadcastReciver”?
- python - TypeError:无法在 Ubuntu 16.04 服务器上将“int”对象隐式转换为 str Python3.5.2
- mysql - 记录的 SQL 查询
- java - 仅生成随机字母字符
- sql - 是否可以在选择中包含 if/case
- tensorflow - 在模型定义中使用循环和 Lambda 层时发生 Keras load_model 错误
- android - 如何将 .docx 转换为 .txt 或从 android 中的 docx 文件中获取文本?
- javascript - canActive 角度如何从身份验证中获取值真假(用户登录与否)
- r - 按每个组中的子组汇总(&group by)