【问题标题】:docker-compose.yaml won't parsedocker-compose.yaml 不会解析
【发布时间】:2019-04-05 18:31:29
【问题描述】:

我在运行 docker-compose.yml 时遇到问题。我从 github 页面检索了一个预制的 docker-compose 文件,并根据我的需要对其进行了定制。当试图解析它时,它会返回错误。

我对 yaml 语法不太了解,所以我很难理解错误的根源。

docker-compose.yml 文件中的代码发布在此 pastebin 上:https://pastebin.com/XjM2S11i

解析时返回如下错误:

ERROR:

while parsing a block mapping
  in "<unicode string>", line 5, column 1:
    version: "3.6"
    ^
expected <block end>, but found '<block mapping start>'
  in "<unicode string>", line 149, column 3:
      watchtower:
      ^

谁能帮我修正语法/缩进?将不胜感激。

【问题讨论】:

    标签: docker docker-compose yaml


    【解决方案1】:

    在您的文件中(第 115 行):

    phpmyadmin:
        hostname: phpmyadmin
    

    因此,根级映射的键 phpmyadmin 的值本身就是一个映射,它以键 hostname 开头,缩进 四个 位置。

    那么在第 149 行你有:

      watchtower:
        container_name: watchtower
    

    仅缩进两个位置。您必须决定 watchtower 的父节点是什么:要么它是根级映射的键,然后它需要向左对齐,要么它是同一映射中的键 hostname 是键in 然后它需要缩进四个位置。或者需要在watchtower之前的根级映射中插入一个键。

    我强烈建议始终对映射值和序列项使用 两个位置 缩进(这意味着序列项指示符偏移):

    a:
      b:
      - 1
      - 2
    

    您的 docker-compose YAML 文件是一个大杂烩,其中包含至少 2 和 4 位映射的缩进和 2、3 和 4 位的序列项缩进。

    docker-compose 没有抱怨:

    ports:
     - "80:80"
      - "443:443"
    

    在您的文件中却出乎意料,因为它不是有效的 YAML。

    【讨论】:

      【解决方案2】:

      'Lint'(语法检查)使用 http://www.yamllint.com/ 的东西对 docker-compose.yml,更正语法错误,然后重新运行 Docker 命令。

      【讨论】:

      • 我知道那个网站,但我不知道如何纠正错误
      • 该站点的后端是 ruby​​ 解析器,它在某些细节上与 docker-compose 使用的 PyYAML (Python) 库不同。
      猜你喜欢
      • 1970-01-01
      • 2020-12-29
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2021-12-02
      • 2020-08-16
      • 1970-01-01
      相关资源
      最近更新 更多