如何评估 docker-compose.yml 文件中的动态变量?

Rea*_*elp 7 bash date docker dockerfile docker-compose

我想在我的docker-compose.yml文件中使用当前日期作为文件名的后缀。最终目标是一个文件,例如my_log_123456789.log123456789当前的 unix 日期在哪里。

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

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

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

  • 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文件?

Phi*_*ppe 8

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

#!/usr/bin/env bash

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

docker-compose up
Run Code Online (Sandbox Code Playgroud)


Kam*_*Cuk 6

不,docker 没有“动态”变量 - --env-filedocker 会按原样读取文本,从字面上,前导和尾随'或被"删除,而不由 shell 进行任何解释和扩展。

创建另一个脚本,将export变量值设置为或在调用之前docker-compose编辑文件中变量的内容。.envdocker-compose