【发布时间】: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