Gitlab CI服务访问docker runner

jhkqcmku  于 2023-04-20  发布在  Docker
关注(0)|答案(1)|浏览(155)

我正在使用docker-runner和linked service运行Gitlab CI pipeline:
.gitlab-ci.yml

image: maven:3-jdk-11
prometheus_tailer:
  stage: test
  services:
    - name: lossuperktos/stats-prometheus
      alias: prometheus
  script:
    - mvn test

lossuperktos/stats-prometheus Dockerfile:

FROM prom/prometheus
ADD prometheus.yml /etc/prometheus/
EXPOSE 9090

它从prometheus.yml加载配置:

global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: queue_monitoring
    scrape_interval: 5s
    scrape_timeout: 5s
    metrics_path: /metrics
    static_configs:
      - targets: [ 'http://localhost:9091' ]

所以基本上我需要双向通信,我可以通过别名“prometheus”在应用程序中访问lossuperktos/stats-prometheus,它工作正常。当prometheus服务试图访问localhost:9091时,问题就开始了。我知道它不能工作,因为不同的网络,但我不知道如何解决这个问题。有人能给我指出正确的方向吗?

u1ehiz5o

u1ehiz5o1#

我需要双向沟通

默认链接不允许与构建容器对话

默认情况下,服务容器无法建立到作业容器的连接。
你最好的选择是在你的工作中使用docker-compose。
作为替代方案,如果您在容器中的localhost:9091上运行应用程序,并且您正在使用docker:dind服务来运行docker,则服务可以使用Docker dind守护程序服务的别名访问您使用暴露端口运行的容器。
这是因为应用程序可以通过服务容器访问,运行应用程序容器的docker守护程序服务prometheus想要刮取。
作为一种技巧,你甚至可以将dind服务的别名设置为localhost,但我不推荐这样做,你可能会想将scrape配置更改为主机名。
参见:https://docs.gitlab.com/ee/ci/services/#connecting-services

每次构建使用docker网络

或者,如果你配置你的docker executor为每个作业创建一个docker网络,作业容器可以通过使用build别名解析;主机名由GitLab分配。
因此,您可以设置scrape config来查看主机http://build:9091,并确保映像在dockerfile中设置了EXPOSE 9091

相关问题