我有一个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
如何解决此问题?
感谢您的帮助!
答案 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。这就是普罗米修斯的目标。