gpt4 book ai didi

docker - Docker可以在Volumes定义中使用env变量吗?

转载 作者:行者123 更新时间:2023-12-02 18:15:25 28 4
gpt4 key购买 nike

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

    volumes: ['log-volume:/path/to/container/logs', 
'data-volume:/path/to/container/data' ${WEBAPP_VOLUMES:-''}]

我认为此 应该将环境​​变量默认为空字符串,并且一切都应该很好(即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.

有人知道要完成我在这里要做的事情吗?

最佳答案

当然,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挂载的源,但不允许您将该挂载设为可选,也不能将其神奇地扩展为多个不同的挂载)。

您可能会发现可以使用 extends关键字(在 Extending services中进行了描述)来获得所需的行为,尽管在版本3和更高版本的撰写文件格式中已不再支持该关键字。

关于docker - Docker可以在Volumes定义中使用env变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46896220/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com