Docker容器中的Prometheus无法到达Spring Boot应用程序

时间:2018-09-17 21:15:04

标签: docker spring-boot prometheus

我有一个Spring Boot应用程序,该应用程序在本地9000端口上运行(不在容器中)。该应用程序已使用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 enter image description here

如何解决此问题?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

prometheus.yml 中,而不是localhost:9000 放置容器的特定名称:spring_boot_prometheus:9000

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

答案 1 :(得分: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

如果您的服务(9000)在没有docker的计算机上运行:

  

这不是标准用例

阅读here的设置方法。

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