【问题标题】:How to evaluate a dynamic variable in a docker-compose.yml file?如何评估 docker-compose.yml 文件中的动态变量?
【发布时间】:2020-05-31 19:42:24
【问题描述】:

我想在我的docker-compose.yml 文件中为文件名加上当前日期的后缀。最终目标是像my_log_123456789.log 这样的文件,其中123456789 是当前的unix 日期。

我尝试使用.env 文件,但没有按预期进行评估。我的尝试是:

# .env
NOW="$(date +%s)"
# docker-compose.yml
version: '3.8'
services:
  xxx:
      container_name: xxx
      image: xxx/xxx
      volumes:
        - /home/ubuntu/xxx_"$(NOW)".log:/home/ubuntu/xxx.log
      ...

我尝试了一些变体,但遇到了以下问题:

  • ERROR: Invalid interpolation format for "volumes" option in service "xxx": "/home/ubuntu/xxx_$(NOW).log:/home/ubuntu/xxx.log"
  • 创建了一个名为 'xxx_"$(date +%s)".log' 的目录

如何将当前日期附加到 docker-compose.yml 文件中的日志文件?

【问题讨论】:

  • 您可以将环境变量传递给docker-compose run -e VAR=VAL
  • 不,你不能……
  • 您可以在运行 Compose 文件之前从您的环境中导出变量吗?即从.env中取出NOW
  • 运行 NOW="$(date +%s)" sudo docker-compose up -d 会生成一个目录 xxx_NOW.log/
  • @KamilCuk,是的,是的,你可以。 docs.docker.com/compose/environment-variables

标签: bash docker date docker-compose dockerfile


【解决方案1】:

你可以做的是在调用docker-compose之前生成.env

#!/usr/bin/env bash

cat << EOF > .env
NOW=$(date +%s)
EOF

docker-compose up

【讨论】:

    【解决方案2】:

    不,docker 没有“动态”变量 - 来自 --env-file 的文本由 docker as it is 读取,字面意思是,前导和尾随 '" 被删除,没有任何解释和扩展由外壳完成。

    在调用 docker-compose 之前,创建另一个脚本来更改 .env 文件中的变量内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-12
      • 2020-04-16
      • 2016-08-28
      • 2018-08-12
      • 2012-10-25
      • 1970-01-01
      • 2016-07-07
      • 2018-07-10
      相关资源
      最近更新 更多