docker - 502 在同一网络中的 docker 容器之间通信时网关错误
问题描述
我正在尝试使用 prometheus、cadvisor 和 alarmmanager 设置 grafana。我正在尝试通过 docker-compose 来做到这一点。除了 grafana 与 prometheus 作为数据源通信之外,我已经完成了所有工作。首先我的设置通过docker-compose.yml
version: '3.7'
volumes:
prometheus_data: {}
grafana_data: {}
networks:
monitor-net:
services:
prometheus:
image: prom/prometheus:v2.13.1
volumes:
- ./prometheus/:/etc/prometheus/
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
ports:
- 9090:9090
expose:
- 9090
networks:
- monitor-net
links:
- cadvisor:cadvisor
- node-exporter:node-exporter
restart: always
node-exporter:
image: prom/node-exporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- --collector.filesystem.ignored-mount-points
- "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/net> ports:
- 9100:9100
expose:
- 9100
networks:
- monitor-net
restart: always
alertmanager:
image: prom/alertmanager
ports:
- 9093:9093
expose:
- 9093
volumes:
- ./alertmanager/:/etc/alertmanager/
networks:
- monitor-net
restart: always
command:
- '--config.file=/etc/alertmanager/config.yml'
- '--storage.path=/alertmanager'
cadvisor:
image: google/cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- 8080:8080
expose:
- 8080
networks:
- monitor-net
restart: always
grafana:
image: grafana/grafana:6.7.2
user: "472"
ports:
- 3000:3000
expose:
- 3000
volumes:
- grafana_data:/var/lib/grafana
- ./grafana/provisioning/:/etc/grafana/provisioning/
env_file:
- ./grafana/config.monitoring
networks:
- monitor-net
links:
- prometheus:prometheus
restart: always
我可以通过与我的 VPS 耦合的域名在浏览器中单独访问所有服务。我还可以在搬运工中看到它们确实是同一个网络中的 6 个。但是当它尝试从我的 grafana 应用程序访问 http://prometheus:9090 时:
我收到以下错误:
t=2021-03-21T19:24:09+0000 lvl=eror msg="Data proxy error" logger=data-proxy-log userId=1 orgId=1 uname=admin path=/api/datasources/proxy/21/api/v1/query remote_addr=172.26.0.1 referer=http://<my-remote-host>:3000/datasources/edit/21/ error="http: proxy error: dial tcp 172.26.0.5:9090: i/o timeout"
t=2021-03-21T19:24:09+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/datasources/proxy/21/api/v1/query status=502 remote_addr=172.26.0.1 time_ms=30061 size=0 referer=http://<my-remote-host>:3000/datasources/edit/21/
现在我已经成功地完成了容器相互通信的类似设置,但我无法让它工作..出于明显的安全原因,我无法在 UFW(运行 ubuntu 服务器)中打开端口,但这不应该一个区别。我还禁用了 iptablesdocker-daemon.json
希望大家给点建议!
解决方案
推荐阅读
- java - 在 sl4j 的 java 中的每个类中初始化记录器
- python - 无法使用 selenium python 单击下拉元素(uib-dropdown-toggle)
- php - 在 PHP 中处理 POST 请求的最佳实践
- java - 无法显示 android 权限请求对话框
- algorithm - 给定问题的最小可能总和
- javascript - 谁能解释为什么我得到一个 typeError 指出“this.draw 不是 ballFunction.move 的函数
- apache - 安装和升级帮助 安装程序无法创建数据目录(/var/www/moodledata)
- python-3.x - 将值插入字典列表
- python - 扩展 djoser 登录方法以获取用户角色
- python - 如何跨行从html中获取文本