【问题标题】:How to replace environment variable inside yml file when running docker compose运行docker compose时如何替换yml文件中的环境变量
【发布时间】:2022-06-24 18:26:17
【问题描述】:

我想将 env 变量传递给一个 yml 文件,该文件将用作某个容器的配置文件。

这是我的文件树。

alertmanager
  - .env
  - alertmanager.yml
prometheus
  - prometheus.yml
  - rules.yml
docker-compose.yml

这是 docker-compose 文件中的代码。


  alertmanager:
    image: prom/alertmanager
    container_name: alertmanager
    ports:
      - 9093:9093
    volumes:
      - ./alertmanager/:/etc/alertmanager/
    restart: always
    command:
      - '--config.file=/etc/alertmanager/alertmanager.yml'
      - '--storage.path=/alertmanager'
    env_file:
      - ./alertmanager/.env

而 alaertmanager.yml 如下所示。

route:
  receiver: "slack"

receivers:
  - name: "slack"
    slack_configs:
      - send_resolved: true
        username: ${USERNAME}
        channel: ${CHANNEL}
        api_url: ${SLACK_URL}

问题是 alertmanager.yml 将 ${SLACK_URL} 识别为字符串。 我猜这是因为 alertmanage.yml 是一个静态文件,没有引擎可以将 ${SLACK_URL} 替换为 http://slack_url.com 之类的东西。

我看到了一些解决这个问题的答案。 第一个选项是创建一个可以将${} 替换为环境变量的python 脚本。但是,据我所知,我需要在 docker 映像中包含 python。 另一种选择是使用envsubst。但是,我需要在 docker 映像中启用 envsubst 命令。在这两种方式中,我都需要自定义一个我认为很麻烦的 docker 镜像。

有什么办法可以解决这个问题吗?
任何帮助将不胜感激。

【问题讨论】:

  • Docker Compose 从不对文件进行任何修改,无论是存储在镜像中还是从主机绑定挂载。您必须更新主机上的内容以获得正确的特定值或修改容器启动,可能使用自定义派生图像。

标签: docker docker-compose yaml prometheus


【解决方案1】:

在你的 yml 文件上测试一下。它正在开发我的 ruby​​ on rails 开发。

slack_url:


compose.yml

environment:
  SLACK_URL: some_url
 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 2019-11-01
    • 2015-06-17
    • 2019-08-02
    相关资源
    最近更新 更多