Docker能否在卷定义中使用env变量?

Docker能否在卷定义中使用env变量?,docker,docker-compose,yaml,docker-swarm,Docker,Docker Compose,Yaml,Docker Swarm,我在docker compose文件中定义了一个webapp服务。尝试为用户自定义卷装载添加一些灵活性。我尝试了许多变体,但都没有成功,最有希望的是: volumes: ['log-volume:/path/to/container/logs', 'data-volume:/path/to/container/data' ${WEBAPP_VOLUMES:-''}] 我认为这个应该将环境变量默认为空字符串,并且一切都应该良好(即.env文件中没有定义WEB

我在docker compose文件中定义了一个
webapp
服务。尝试为用户自定义卷装载添加一些灵活性。我尝试了许多变体,但都没有成功,最有希望的是:

    volumes: ['log-volume:/path/to/container/logs', 
              'data-volume:/path/to/container/data' ${WEBAPP_VOLUMES:-''}]
我认为这个应该将环境变量默认为空字符串,并且一切都应该良好(即.env文件中没有定义WEBAPP_卷)。然后要使用,任何定义都需要以逗号开头,这并不理想,但似乎可以接受。然而,
docker compose
讨厌这个

我会遇到如下错误:

ERROR: yaml.scanner.ScannerError: while scanning a plain scalar
  in "./docker-compose.yml", line 20, column 110
found unexpected ':'
  in "./docker-compose.yml", line 20, column 124
Please check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.

有人知道我在这里要做什么吗?

当然,Docker可以在卷定义中使用环境变量,但不是您尝试的方式。变量替换发生在YAML解析之后。您尝试使用的语法会导致YAML语法错误(因此出现
YAML.scanner.ScannerError
异常),因此docker compose甚至无法在配置中读取。您可以使用类似的工具来验证YAML语法

类似这样的语法是有效的:

volumes:
    - log-volume:/path/to/container/logs
    - data-volume:/path/to/container/data
    - ${WEBAPP_VOLUME}:/path/to/container/app
…但不会执行您想要的操作(上述操作允许您使用环境变量指定
/path/to/container/app
装载的源,但不允许您将装载设置为可选,也不允许您神奇地将其扩展为多个不同的装载)


您可能会发现,您可以使用
extends
关键字(如中所述)来获得所需的行为,尽管在compose文件格式的第3版和更高版本中已经放弃了对该关键字的支持。

是的,您是对的->我需要允许可选装载的定义,例如HTTPS证书等。你所展示的肯定会有用,但这是必须的。另外,我们刚升级到3.2版。。。