隐藏 docker 驱动参数
Posted
技术标签:
【中文标题】隐藏 docker 驱动参数【英文标题】:Hide docker driver parameters 【发布时间】:2021-07-08 16:15:12 【问题描述】:是否可以隐藏 docker 日志记录驱动程序选项或至少从文件中加载它们?
我想将 docker-compose.yml
提交到 VCS,但要在运行时挂载 LOKI_USER_ID
和 LOKI_API_KEY
。
docker-compose.yml:
version: '3'
x-logging: &logging
logging:
driver: loki
options:
# \/\/\/
loki-url: "https://$LOKI_USER_ID:$LOKI_API_KEY@logs-prod-us-central.grafana.net/loki/api/v1/push"
# /\/\/\
services:
service1:
image: image1
restart: always
<<: *logging
service2:
image: image2
restart: always
depends_on:
- service1
<<: *logging
我试过像这样拆分它们:
logging.yml:
version: '3'
x-logging: &logging
logging:
driver: loki
options:
loki-url: "https://$LOKI_USER_ID:$LOKI_API_KEY@logs-prod-us-central.grafana.net/loki/api/v1/push"
docker-compose.yml:
version: '3'
services:
service1:
image: image1
restart: always
<<: *logging
service2:
image: image2
restart: always
depends_on:
- service1
<<: *logging
然后运行
docker-compose -f logging.yml -f docker-compose.yml config
但无法解析*logging
别名:
ERROR: yaml.composer.ComposerError: found undefined alias 'logging'
in "./docker-compose.yml", line 12, column 9
这是意料之中的事。
实现此目的的另一种方法是使用envsubst
并处理docker-compose.yml
文件:
loki.env.sh:
export LOKI_USER_ID="XXX"
export LOKI_API_KEY="YYY"
docker-compose.yml:
version: '3'
x-logging: &logging
logging:
driver: loki
options:
loki-url: "https://$LOKI_USER_ID:$LOKI_API_KEY@logs-prod-us-central.grafana.net/loki/api/v1/push"
# ...
并使用以下命令启动它:
source loki.env.sh
envsubst < docker-compose.yml | docker-compose up -d
【问题讨论】:
【参考方案1】:好的,所以解决方案更简单。
根据documentation docker-compose 将利用与docker-compose.yml
位于同一目录中的.env
文件中的属性。
.env:
LOKI_USER_ID=XXX
LOKI_API_KEY=YYY
docker-compose.yml:
version: '3'
x-logging: &logging
logging:
driver: loki
options:
loki-url: "https://$LOKI_USER_ID:$LOKI_API_KEY@logs-prod-us-central.grafana.net/loki/api/v1/push"
# ...
然后简单地启动
docker-compose up
【讨论】:
以上是关于隐藏 docker 驱动参数的主要内容,如果未能解决你的问题,请参考以下文章
Docker 学习总结(75)—— Docker 三种网络驱动 bridgemacvlanoverlay 详解