Docker部署Prometheus抓取本地Spring服务报no route to host如何解决
Prometheus容器抓取本地Spring服务异常解决
问题现象
Prometheus targets页面对应Spring服务的目标状态为down,报错connect: no route to host,但本地浏览器可正常访问该服务的指标端点,临时关闭Windows防火墙后问题仍存在。
环境说明
- 技术栈:Docker + Spring Boot
- 被监控的Spring Boot服务运行在本地主机,
http://<myIp>:8080/actuator/prometheus可正常返回指标数据,<myIp>为本地主机IP。
相关配置
docker-compose.yml配置
# Use root/example as user/password credentials version: '3.8' services: mysql: image: mysql:8.0.22 container_name: mysql ports: - 3306:3306 environment: MYSQL_USER: atendente MYSQL_PASSWORD: atendente MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: plano_saude_db jaeger: image: jaegertracing/all-in-one:1.21 container_name: jaeger ports: - 5775:5775/udp - 6831:6831/udp - 5778:5778 - 16686:16686 - 14268:14268 - 14250:14250 - 9411:9411 prometheus: image: prom/prometheus:v2.24.1 container_name: prometheus ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: '--config.file=/etc/prometheus/prometheus.yml'
prometheus.yml初始配置
global: scrape_interval: 15s # 默认每15秒抓取一次目标 scrape_configs: - job_name: 'prometheus' scrape_interval: 5s static_configs: - targets: ['localhost:9090'] - job_name: 'planosaude-sys' scrape_interval: 5s metrics_path: '/actuator/prometheus' static_configs: - targets: ['<myIp>:8080']
无效尝试
将target地址替换为docker.for.win.localhost后,出现新报错:dial tcp: lookup docker.for.win.localhost on 127.0.0.11:53: no such host。
最终解决方案
修改prometheus.yml中planosaude-sys任务的target配置,将地址替换为Docker提供的宿主机访问域名即可:
static_configs: - targets: ['host.docker.internal:8080']
修改后重启Prometheus容器,即可正常抓取本地Spring服务的指标数据。
内容的提问来源于stack exchange,提问作者Siqueira
相关产品推荐
相关产品推荐

