我正在使用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
时,问题就开始了。我知道它不能工作,因为不同的网络,但我不知道如何解决这个问题。有人能给我指出正确的方向吗?
1条答案
按热度按时间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
。