隐藏 docker 驱动参数

Posted

技术标签:

【中文标题】隐藏 docker 驱动参数【英文标题】:Hide docker driver parameters 【发布时间】:2021-07-08 16:15:12 【问题描述】:

是否可以隐藏 docker 日志记录驱动程序选项或至少从文件中加载它们?

我想将 docker-compose.yml 提交到 VCS,但要在运行时挂载 LOKI_USER_IDLOKI_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 volume创建时能不能指定size

Docker 学习总结(75)—— Docker 三种网络驱动 bridgemacvlanoverlay 详解

Docker 学习总结(75)—— Docker 三种网络驱动 bridgemacvlanoverlay 详解

systemd与cgroupfs

docker里找不到gpu

docker部署可不可以隐藏源码