我刚刚在Docker Compose v3.4中看到了新的extension fields
,并尝试将其与部分覆盖结合使用。
我的撰写文件如下所示:
version: '3.4'
x-environment:
&default-environment
- FOO=foo
- BAR=bar
services:
myservice:
[...]
environment:
<< : *default-environment
- BAZ=baz
当我尝试运行它时,我得到:
ERROR: yaml.parser.ParserError: while parsing a block mapping
expected <block end>, but found '-'
(对于我的第&#34; &lt;&lt;:* default-environment &#34;)
有什么想法吗?
答案 0 :(得分:3)
您正在尝试使用merge key(指定为过时的YAML版本1.1)和序列。这不起作用,因为合并键不是新语法,而只是可用于映射的特殊键。
当解析器解析environment
的内容时,它首先看到这一行:
<< : *default-environment
此行包含一个隐式密钥<<
,以及该密钥的值*default-environment
。因此,解析器决定environment
的值是映射。
现在在下一行,解析器遇到-
,它是序列项的指示符。由于解析器当前正在解析映射,因此它无法处理序列项指示符,因此会因错误而停止。
请注意,没有为当前的YAML 1.2版定义合并密钥,并且将针对即将发布的1.3版本明确弃用。因此,一般不鼓励使用它。此外,正如您所发现的那样,没有办法将它与序列一起使用。