You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI Docker runner下实现Prometheus与作业容器双向通信

问题根因

你配置的localhost:9091指向的是Prometheus服务容器自身的本地回路,而GitLab CI中作业容器和所有Service容器都是独立的网络命名空间,共处在Runner创建的专属网桥网络下,所以Prometheus无法通过自身localhost访问到作业容器内启动的9091端口服务。

可行解决方案

方案1:修改Prometheus抓取目标(最简便)

GitLab Docker Runner会自动为作业容器在CI网络中注册域名build,所有Service容器都可以通过该域名访问到作业容器的端口,你只需修改Prometheus配置即可:

  1. 调整自定义镜像内的prometheus.yml,将targets修改为build:9091,注意不需要加http前缀:
scrape_configs:
  - job_name: queue_monitoring
    scrape_interval: 5s
    scrape_timeout: 5s
    metrics_path: /metrics
    static_configs:
      - targets: [ 'build:9091' ]
  1. 重新构建lossuperktos/stats-prometheus镜像后即可正常使用。

方案2:将指标服务独立为CI Service

如果9091端口对应的指标服务是独立的业务组件,而非maven测试启动的内嵌服务,可以将其也加入CI服务列表,通过别名互通:

  1. 修改.gitlab-ci.yml的services配置,新增指标服务:
services:
  - name: lossuperktos/stats-prometheus
    alias: prometheus
  - name: 你的指标服务镜像地址
    alias: metrics-exporter
  1. 将Prometheus配置的targets修改为['metrics-exporter:9091']即可,所有服务和作业容器都可以通过别名互相访问。

方案3:动态修改Prometheus配置(无需重制镜像,适合临时测试)

如果不想重新构建Prometheus镜像,可以在CI作业脚本中动态修改Prometheus的配置并重载:

  1. 先修改自定义Prometheus镜像的启动参数,加上--web.enable-lifecycle开启配置重载接口,Dockerfile示例:
FROM prom/prometheus
ADD prometheus.yml /etc/prometheus/
EXPOSE 9090
CMD ["--web.enable-lifecycle"]
  1. 修改.gitlab-ci.yml的script步骤,启动测试前先更新Prometheus配置:
script:
  - curl -X POST http://prometheus:9090/-/reload -H "Content-Type: application/json" -d '[{"op":"replace","path":"/scrape_configs/0/static_configs/0/targets","value":["build:9091"]}]'
  - mvn test

内容的提问来源于stack exchange,提问作者minizibi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:15:04