当前位置: 首页 > 知识库问答 >
问题:

Docker容器中的Prometheus无法访问Spring Boot应用程序

乐正嘉瑞
2023-03-14

我有一个Spring Boot应用程序,它在9000端口本地运行(不在容器中)。应用程序已将致动器配置为Prometheus测微计,整个统计信息可通过URL localhost获得:9000/致动器/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

我怎样才能解决这个问题?

感谢您的帮助!

共有2个答案

井通
2023-03-14

对于prometheus docker容器,“localhost”表示本地。所以普罗米修斯试图在集装箱内连接到港口9000。这行不通。

此外,据我从您的帖子中了解,普罗米修斯容器中没有在端口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

在此处找到:论坛。docker。com公司

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

这不是一个标准用例

请阅读此处的设置方法。

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

何高歌
2023-03-14

在普罗米修斯。yml,而不是localhost:9000,输入容器的特定名称:spring\u boot\u prometheus:9000。

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

 类似资料:
  • tl;如果在Docker容器中运行,一个RestController正确回答,另一个则不正确。 该服务有两个API 和。 它们都是通过docker compose运行的。 返回。 返回一个空的200响应。正如预期的那样。 应该返回一个200响应和一个每次调用API时都会增加的数字。可悲的是,事实并非如此。 在本地运行该服务可以提供预期的结果。 maven spotify插件用于从以下创建图像。 我

  • 我可以对Docker API进行cUrl调用,但是如果我从容器(docker-comals)运行相同的脚本,我就无法到达任何API终结点。 我的请求如下: 原因可能是使用了localhost,但我现在还找不到解决方案。有什么建议吗? 编辑:下面是我正在使用的堆栈(Api平台)的简要摘要https://api-platform.com/).每个容器都连接到“api_默认”网桥网络: 基于php=Sy

  • 问题内容: 我使用docker-compose和以下配置部署了标准的Jenkins Docker映像: 在阅读了许多SO问题之后,我测试了将Root添加到docker用户组,并验证Container中的用户是Root with 。 当我尝试使用“ Docker URL = unix:///var/run/docker.sock”在Jenkins UI中添加Docker访问时,出现错误消息“ **o

  • 我有一个Django应用程序的简单代码构建项目,我想在docker容器中启动一个Postgres数据库进行测试。 命令是: 在我的本地机器上,一切都工作得很好,但在AWS CodeBuild中,我收到了错误: psql:错误:无法连接到服务器:无法连接到服务器:没有这样的文件或目录服务器是否在本地运行并接受Unix域套接字"/var/run/postgresql/. s. PGSQL.5432"上

  • 我使用Docker compose和以下配置部署了标准Jenkins Docker映像: 在阅读了许多SO问题后,我测试了将Root添加到使用的docker用户组中,并验证了容器中的用户是使用的Root。 当我尝试在Jenkins UI中使用Docker URL=unix:///var/run/docker.sock添加Docker访问时,我会收到错误消息org.newsclub.net.unix

  • 我有一个jupyterhub运行在一个容器与network_mode:主机由于一些要求。但是,在我的docker-comment文件中将network_mode设置为主机后,我无法使用主机ip: 8000从外部主机访问jupyterhub。 我的理解是 如果对容器使用主机网络模式,则该容器的网络堆栈不会与Docker主机隔离(容器共享主机的网络名称空间),并且容器不会获得分配的自己的IP地址。例如