我在docker compose文件中定义了webapp
服务。尝试为用户添加一些灵活性来自定义卷安装。我尝试了很多变种,都没有成功,最有希望的是:
volumes: ['log-volume:/path/to/container/logs',
'data-volume:/path/to/container/data' ${WEBAPP_VOLUMES:-''}]
我认为应该将环境变量默认为空字符串,并且一切都应该是好的(即.env文件中未定义WEBAPP_VOLUMES)。然后使用,需要用逗号开始任何定义,不理想,但似乎可以接受。但是,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.
有谁知道要完成我想在这里做的事情?
答案 0 :(得分:2)
当然,Docker可以在卷定义中使用环境变量,但不是您尝试这样做的方式。 YAML解析后,发生变量替换。您尝试使用的语法会导致YAML语法错误(因此yaml.scanner.ScannerError
异常),因此docker-compose甚至无法读取配置。您可以使用this yaml parser之类的工具来验证YAML语法。
这样的东西是有效的语法:
volumes:
- log-volume:/path/to/container/logs
- data-volume:/path/to/container/data
- ${WEBAPP_VOLUME}:/path/to/container/app
...但是不会做你想要的(上面会让你用环境变量指定/path/to/container/app
mount的来源,但是不允许你让那个mount可选,也不会让你神奇地将它扩展为多个不同的坐骑。)
您可能会发现可以使用extends
关键字(在Extending services中描述)来获取您想要的行为,尽管在撰写文件格式的版本3及更高版本中已删除对该关键字的支持