Joe*_*oeG 4 yaml docker docker-compose docker-swarm
我webapp在 docker compose 文件中定义了一项服务。尝试为用户添加一些灵活性来自定义卷安装。我尝试了很多变体,但都没有成功,最有希望的一个是:
volumes: ['log-volume:/path/to/container/logs',
'data-volume:/path/to/container/data' ${WEBAPP_VOLUMES:-''}]
Run Code Online (Sandbox Code Playgroud)
我认为这应该将环境变量默认为空字符串,并且一切都应该很好(即 WEBAPP_VOLUMES 未在 .env 文件中定义)。然后要使用,需要以逗号开始任何定义,这并不理想,但似乎可以接受。然而,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.
Run Code Online (Sandbox Code Playgroud)
有谁知道要完成我在这里想做的事情?
当然,Docker 可以在卷定义中使用环境变量,但不是您尝试的方式。变量替换发生在 YAML 解析之后。您尝试使用的语法会导致 YAML 语法错误(因此出现yaml.scanner.ScannerError异常),因此 docker-compose 甚至无法读取配置。您可以使用像yaml 解析器这样的工具来验证 YAML 语法。
像这样的东西是有效的语法:
volumes:
- log-volume:/path/to/container/logs
- data-volume:/path/to/container/data
- ${WEBAPP_VOLUME}:/path/to/container/app
Run Code Online (Sandbox Code Playgroud)
...但不会做你想做的事(上面的内容可以让你/path/to/container/app用环境变量指定安装的来源,但不会让你将该安装设为可选,也不会让你神奇地将其扩展为多个不同的安装) 。
您可能会发现可以使用extends关键字(在扩展服务中进行了描述)来获得您想要的行为,尽管在 compose 文件格式的版本 3 及更高版本中已删除对该关键字的支持。
| 归档时间: |
|
| 查看次数: |
13456 次 |
| 最近记录: |