Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables Docker Compose-colon方式中的环境变量赋值_Variables_Syntax_Environment Variables_Yaml_Docker Compose - Fatal编程技术网

Variables Docker Compose-colon方式中的环境变量赋值

Variables Docker Compose-colon方式中的环境变量赋值,variables,syntax,environment-variables,yaml,docker-compose,Variables,Syntax,Environment Variables,Yaml,Docker Compose,这是关于docker-compose.yml文件语法的问题。我在网上遇到了这样的变量赋值: 环境: PMA_主机:mysql 另一方面,文档说明如下: 环境: -调试=1 没有破折号和冒号的方法合适吗?区别是什么?文档本身说: 您可以使用数组或字典 现在,让我们原谅Docker没有使用正确的术语(数组实际上是YAML中的序列,字典是映射),并从YAML的角度来看一下: 映射是YAML语法的一部分,因此由YAML解析器进行解析,从而使语法感知编辑器能够执行适当的高亮显示等操作。正如文档所

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

环境:
PMA_主机:mysql


另一方面,文档说明如下:

环境:
-调试=1


没有破折号和冒号的方法合适吗?区别是什么?

文档本身说:

您可以使用数组或字典

现在,让我们原谅Docker没有使用正确的术语(数组实际上是YAML中的序列,字典是映射),并从YAML的角度来看一下:

映射是YAML语法的一部分,因此由YAML解析器进行解析,从而使语法感知编辑器能够执行适当的高亮显示等操作。正如文档所说,YAML会将
true
false
等值转换为布尔值,因此您需要注意这一点。文档中的示例:

环境:
机架环境:开发
秀:“真的”
会议秘密:
如果我们不引用
“true”
,它将被解析为一个布尔值,这不是我们想要的

另一方面,使用序列会留下YAML语法的空间。序列本身是YAML,但每个值只解析为一个标量。例如,此处序列中的第一个标量值:

环境:
-机架环境=开发
-SHOW=true
-会议秘密
将由YAML解析为
RACK_ENV=development
。Docker将进行后处理以将变量名和值分开。因此,使用此方法意味着您要使用两个解析步骤,这使得语法感知编辑器更难正确地高亮显示它。此外,您还强制用户决定在何处使用
=
以及在何处使用
,这对于不熟悉YAML的人来说并不明显。它会让人困惑

看看转义,不需要再引用
true
。这是因为它位于YAML标量的中间,因此不被解析为独立值。事实上,引用它会使YAML将引用视为内容

这也意味着,如果需要引用(例如,因为要使用转义序列),则需要引用整个标量。例如,如果希望在值中包含一个制表符,则如下所示:

环境:
-“MY_VAR=some\t值”
如果您仅在
=
之后引用零件,则此操作无效。同样,这可能令人困惑


结论:对我来说,使用映射似乎更为一致,对用户的困惑更少,因此更可取。ymmv.

意见问题?我将使用该教程的代码,并添加一些对其他图像和其他环境变量的更改,但我不知道该怎么做。或者我应该更好地理解做这些作业。问题是“这是正确的”只是说,我相信这两个工作,这是一个意见的问题。好奇心没什么错。尝试这两种方法,看看哪些方法有效,哪些是您喜欢的。:-)