gpt4 book ai didi

variables - Docker Compose 中的环境变量赋值 - 冒号方式

转载 作者:行者123 更新时间:2023-12-04 05:28:57 37 4
gpt4 key购买 nike

这是关于 docker-compose.yml 文件语法的问题。我在网上遇到过这样的变量赋值:

environment:
PMA_HOST: mysql
http://tech.osteel.me/posts/2017/01/15/how-to-use-docker-for-local-web-development-an-update.html

另一方面,文档是这样说的:
environment:
- DEBUG=1
https://docs.docker.com/compose/environment-variables/
没有破折号和冒号的方式正确吗?有什么不同?

最佳答案

文档本身说 both methods are working :

You can use either an array or a dictionary.


现在让我们原谅 Docker 没有使用正确的术语(数组实际上是 YAML 中的序列,字典是映射)并从 YAML 的角度来看一下:
映射是 YAML 语法的一部分,因此由 YAML 解析器解析,这使具有语法意识的编辑器能够进行适当的突出显示等。就像文档说的,像 true 这样的值和 false将被 YAML 转换为 bool 值,因此您需要注意这一点。来自文档的示例:

environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
我们会不会报价 'true' ,它将被解析为 bool 值,这不是我们想要的。
另一方面,使用序列会留下 YAML 语法的空间。序列本身是 YAML,但每个值都被解析为一个标量。例如,这里的序列中的第一个标量值:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
将被 YAML 解析为 RACK_ENV=development . Docker 将进行后处理以将变量名与值分开。因此,使用此方法意味着您正在使用两个解析步骤,这使得具有语法意识的编辑器更难以正确突出显示它。此外,您将有关在哪里使用的决定强加于用户 =哪里 : ,这对于不太了解 YAML 的人来说并不是很明显。它可以混淆人们。
看着逃跑, true不需要再引用了。这是因为它位于 YAML 标量的中间,因此不会被解析为独立值。事实上,引用它会使 YAML 将引用视为内容。
这也意味着如果您需要引用(例如因为您想使用转义序列),您需要引用整个标量。例如,如果你想在你的值中有一个制表符,它看起来像这样:
environment:
- "MY_VAR=some\tvalue"
如果您只引用 = 之后的部分,它将不起作用.同样,这可能令人困惑。
结论:对我来说,使用映射似乎更一致,并且不会让用户感到困惑,因此更可取。嗯。

关于variables - Docker Compose 中的环境变量赋值 - 冒号方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43106459/

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