trz*_*czy 7 variables syntax yaml environment-variables docker-compose
这是关于docker-compose.yml文件语法的问题.我在互联网上遇到了这样的变量赋值:
environment:
PMA_HOST: mysql
Run Code Online (Sandbox Code Playgroud)
http://tech.osteel.me/posts/2017/01/15/how-to-use-docker-for-local-web-development-an-update.html
另一方面,文档说明如下:
environment:
- DEBUG=1
Run Code Online (Sandbox Code Playgroud)
https://docs.docker.com/compose/environment-variables/
是没有破折号和结肠的方式吗?有什么不同?
fly*_*lyx 16
文档本身说两种方法都有效:
您可以使用数组或字典.
现在让我们原谅Docker没有使用正确的术语(数组实际上是YAML中的一个序列,字典是一个映射)并从YAML角度看:
映射是YAML语法的一部分,因此由YAML解析器解析,这使得语法感知编辑器能够进行适当的突出显示等.就像文档说的那样true,falseYAML会将这些值转换为布尔值,因此您需要注意这一点.来自docs的示例:
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
Run Code Online (Sandbox Code Playgroud)
如果我们不引用'true',它将被解析为布尔值,这不是我们想要的.
另一方面,使用序列会留下YAML语法的空间.序列本身是YAML,但值只是被解析为每个标量.例如,序列中的第一个标量值:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
Run Code Online (Sandbox Code Playgroud)
将被YAML解析为RACK_ENV=development.Docker将进行后处理以将变量名称与值分开.因此,使用此方法意味着您正在使用两个解析步骤,这使得语法感知编辑器更难以正确地突出显示它.此外,您还要向用户强制决定使用=何处以及在何处使用:,这对于不熟悉YAML的人来说并不是很明显.它可以让人困惑.
看着逃避,true不再需要引用了.这是因为它位于YAML标量的中间,因此不会被解析为独立值.实际上,引用它会使YAML将引号视为内容.
这也意味着如果你需要引用(例如因为你想使用转义序列),你需要引用整个标量.例如,如果您希望在值中包含制表符,则它将如下所示:
environment:
- "MY_VAR=some\tvalue"
Run Code Online (Sandbox Code Playgroud)
如果你只引用后面的部分它将无法工作=.同样,这可能令人困惑.
结论:对我来说,似乎使用映射更加一致并且使用户更加困惑,因此它更为可取.因人而异.
| 归档时间: |
|
| 查看次数: |
3135 次 |
| 最近记录: |