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

如何通过docker-compose将环境变量传入Prometheus的YAML配置

实现方法

Prometheus本身不支持直接从环境变量读取配置值,你可以通过模板替换的方式实现动态传入主机地址,以下是两种可行方案:


方案一:容器启动时动态生成配置(无需本地预处理)

  1. 调整Prometheus配置为模板格式
    将你原有的prometheus.yml重命名为prometheus.yml.template,把固定的localhost替换为变量占位符${HOST},修改后内容如下:
global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['${HOST}:9090']
  - job_name: golang 
    metrics_path: /prometheus
    static_configs:
      - targets:
        - ${HOST}:9000
  1. 修改docker-compose.yml配置
    新增环境变量映射,覆盖默认启动逻辑,先替换模板生成实际配置再启动Prometheus:
prometheus:
    image: prom/prometheus:v2.24.0
    volumes:
      - ./prometheus/:/etc/prometheus/
      - prometheus_data:/prometheus
    environment:
      # 将宿主机传入的Host变量映射到容器内的环境变量
      - HOST=${Host}
    entrypoint: ["/bin/sh", "-c"]
    command:
      - |
        # 安装替换工具envsubst
        apk add --no-cache gettext
        # 用环境变量替换模板占位符,生成实际配置文件
        envsubst < /etc/prometheus/prometheus.yml.template > /etc/prometheus/prometheus.yml
        # 启动Prometheus,参数和原有配置保持一致
        /bin/prometheus \
        --config.file=/etc/prometheus/prometheus.yml \
        --storage.tsdb.path=/prometheus \
        --web.console.libraries=/usr/share/prometheus/console_libraries \
        --web.console.templates=/usr/share/prometheus/consoles
    network_mode: "host"
    ports:
      - 9090:9090
    restart: always
  1. 启动服务
    直接使用你原来的命令启动即可,传入的Host值会自动同步到配置中:
Host=172.0.0.1 docker-compose up

方案二:本地预生成配置(更轻量,无容器额外依赖)

如果不想修改容器启动逻辑,可在本地提前完成模板替换,再启动服务:

  1. 同样先按方案一的步骤创建prometheus.yml.template模板文件
  2. 新建启动脚本start.sh,内容如下:
#!/bin/bash
# 本地替换模板生成实际配置
envsubst < ./prometheus/prometheus.yml.template > ./prometheus/prometheus.yml
# 启动服务
docker-compose up
  1. 给脚本加执行权限后启动:
chmod +x start.sh
Host=172.0.0.1 ./start.sh

注意事项

  • 如果本地环境没有envsubst工具,可改用sed命令替换,模板占位符改为{{HOST}}后,替换命令写为:sed -i "s/{{HOST}}/$Host/g" ./prometheus/prometheus.yml
  • 注意变量大小写要对应,启动命令传入的变量名和docker-compose、模板中使用的变量名需保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:15:00