Docker 容器中的 Prometheus 无法访问 Spring 启动应用程序
Prometheus in Docker container can't reach Spring Boot application
我有一个 Spring 引导应用程序 运行 在本地 9000 端口上(不在容器中)。该应用程序配置了带有 Prometheus 千分尺的执行器,整个统计数据可通过 URL localhost:9000/actuator/prometheus.
获得
I 运行 Prometheus 在 Docker 容器中使用以下命令:
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
returns如下:
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 引导端点,但它可用。如果我点击端点,它会将我重定向到 1568ec9e8353:9000
而不是 localhost:9000
我该如何解决这个问题?
感谢您的帮助!
对于 prometheus docker 容器 'localhost' 表示本地。因此 prometheus 尝试在容器内连接到端口 9000。这将不起作用。
此外,据我所知,在 prometheus 容器中 运行 端口 9000 上没有服务 post。
如果两个应用都在一个 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) 运行ning 而没有 docker:
This is not a standard use case
阅读 here 如何设置。
您必须获取您的物理计算机的IP地址。例如 192.168.0.10。这就是普罗米修斯的目标。
在prometheus.yml中,而不是localhost:9000
放上容器的具体名称:spring_boot_prometheus:9000
.
Docker 最佳实践 是使用容器名称而不是容器 IP 地址。
我有一个 Spring 引导应用程序 运行 在本地 9000 端口上(不在容器中)。该应用程序配置了带有 Prometheus 千分尺的执行器,整个统计数据可通过 URL localhost:9000/actuator/prometheus.
获得I 运行 Prometheus 在 Docker 容器中使用以下命令:
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
returns如下:
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 引导端点,但它可用。如果我点击端点,它会将我重定向到 1568ec9e8353:9000
而不是 localhost:9000
我该如何解决这个问题?
感谢您的帮助!
对于 prometheus docker 容器 'localhost' 表示本地。因此 prometheus 尝试在容器内连接到端口 9000。这将不起作用。
此外,据我所知,在 prometheus 容器中 运行 端口 9000 上没有服务 post。
如果两个应用都在一个 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) 运行ning 而没有 docker:
This is not a standard use case
阅读 here 如何设置。
您必须获取您的物理计算机的IP地址。例如 192.168.0.10。这就是普罗米修斯的目标。
在prometheus.yml中,而不是localhost:9000
放上容器的具体名称:spring_boot_prometheus:9000
.
Docker 最佳实践 是使用容器名称而不是容器 IP 地址。