5

我有一个在本地(不在容器中)9000 端口上运行的 Spring Boot 应用程序。该应用程序已为执行器配置了 Prometheus 千分尺,整个统计数据可通过 URL localhost:9000/actuator/prometheus 获得。

我使用以下命令在 Docker 容器中运行 Prometheus:

docker run --name spring_boot_prometheus -p 9090:9090 -p 9000:9000 -v /Users/xyz/docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

普罗米修斯.yml

global:
  scrape_interval:     5s
  evaluation_interval: 5s
scrape_configs:
- job_name: 'users-app'
  metrics_path: '/actuator/prometheus'
  static_configs:
  - targets: ['localhost:9000']

该命令docker ps返回以下内容:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
1568ec9e8353        prom/prometheus     "/bin/prometheus --c…"   10 seconds ago      Up 9 seconds        0.0.0.0:9000->9000/tcp, 0.0.0.0:9090->9090/tcp   spring_boot_prometheus

UI 说 prometheus 无法连接到 spring boot 端点,但它是可用的。如果我点击端点,它会将我重定向到1568ec9e8353:9000而不是localhost:9000 在此处输入图像描述

我该如何解决这个问题?

感谢您的帮助!

4

2 回答 2

2

prometheus.yml中,不要localhost:9000 放容器的具体名称:spring_boot_prometheus:9000

Docker 最佳实践是使用容器名称而不是容器 IP 地址。

于 2018-10-13T14:25:54.370 回答
2

对于 prometheus docker 容器,'localhost' 表示本地。因此 prometheus 尝试在容器内连接到端口 9000。这不起作用。

此外,据我从您的帖子中了解到的,在 prometheus 容器内没有在端口 9000 上运行服务。

如果两个应用程序都在 docker 容器中:

目标容器在您的 docker 安装中有自己的 IP 地址。通常为 172.17.yz

一个简单的 docker 网络是必要的,然后你运行两个容器:

$ docker network create mynet

$ docker run --name foo --net mynet img

$ docker run --name bar --net mynet img

在这里找到:forums.docker.com

如果您在没有 docker 的情况下在您的机器上运行服务 (9000):

这不是标准用例

在此处阅读如何设置。

您必须获取物理计算机的 IP 地址。例如 192.168.0.10。这就是普罗米修斯的目标。

于 2018-09-17T21:28:08.403 回答