docker扩展字段解析器错误

时间:2017-12-01 14:22:03

标签: docker-compose yaml

我刚刚在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;)

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您正在尝试使用merge key(指定为过时的YAML版本1.1)和序列。这不起作用,因为合并键不是新语法,而只是可用于映射的特殊键。

当解析器解析environment的内容时,它首先看到这一行:

<< : *default-environment

此行包含一个隐式密钥<<,以及该密钥的值*default-environment。因此,解析器决定environment的值是映射。

现在在下一行,解析器遇到-,它是序列项的指示符。由于解析器当前正在解析映射,因此它无法处理序列项指示符,因此会因错误而停止。

请注意,没有为当前的YAML 1.2版定义合并密钥,并且将针对即将发布的1.3版本明确弃用。因此,一般不鼓励使用它。此外,正如您所发现的那样,没有办法将它与序列一起使用。