【问题标题】:Prometheus in Docker container can't reach Spring Boot applicationDocker 容器中的 Prometheus 无法访问 Spring Boot 应用程序
【发布时间】:2019-02-21 20:28:52
【问题描述】:

我有一个在本地 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

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

我该如何解决这个问题?

感谢您的帮助!

【问题讨论】:

标签: docker spring-boot prometheus


【解决方案1】:

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

此外,据我从您的帖子中得知,在 prometheus 容器内,它不会在端口 9000 上运行服务。

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

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

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

$ docker network create mynet

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

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

在这里找到:forums.docker.com

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

这不是标准用例

阅读here如何设置。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-11-16
      • 2020-08-10
      • 2021-04-22
      • 1970-01-01
      • 2019-10-05
      • 2019-11-05
      • 1970-01-01
      • 2018-03-21
      相关资源
      最近更新 更多