如何修复我的 docker-compose.yml? - 预期 <block end>,但发现 '<block mapping start>'

Posted

技术标签:

【中文标题】如何修复我的 docker-compose.yml? - 预期 <block end>,但发现 \'<block mapping start>\'【英文标题】:How do I fix my docker-compose.yml? - expected <block end>, but found '<block mapping start>'如何修复我的 docker-compose.yml? - 预期 <block end>,但发现 '<block mapping start>' 【发布时间】:2018-03-27 22:35:12 【问题描述】:
ERROR: yaml.parser.ParserError: while parsing a block mapping in "./docker-compose.yml", line 1, column 1
expected <block end>, but found '<block mapping start>' in "./docker-compose.yml", line 2, column 3

我的 yml 文件中似乎存在缩进问题。我在这里阅读了其他一些问题,并尝试了各种缩进方案。我仍然无法让它工作。在发布此问题之前,我特意删除了环境名称/密码。

version: '2'
  ghost:
    image: ghost:latest
    container_name: ghost-blog  #Specify a custom container name, rather than a generated default name.
    environment:
      - NODE_ENV=production
      - mysql_DATABASE=db-name # Change db-name
      - MYSQL_USER=user # Change username
      - MYSQL_PASSWORD=pass # Change db-password
      # - "MAILGUN_USER=mailgun-user" # Change mailgun-user
      # - "MAILGUN_PASSWORD=mailgun-password" # Change mailgun-password
    volumes:
      - ./ghost:/var/lib/ghost # persist the data
    ports:
      - 2368:2368
    depends_on:
      - mysql # ensure that the database will start first
    restart: always

  mysql:
    image: mysql:latest
    container_name: ghost-db
    environment:
      - MYSQL_DATABASE=dbname # Change db-name
      - MYSQL_ROOT_PASSWORD=db-pass # Change root-password
      - MYSQL_USER=user # Change username
      - MYSQL_PASSWORD=sq-pass # Change db-password
    volumes:
      - ./db:/var/lib/mysql
    restart: always

【问题讨论】:

我认为您缺少服务:像这里一样的标签docs.docker.com/compose/gettingstarted/… 【参考方案1】:

对我来说,问题是行的缩进不够。 我在发生问题的行中添加了一个选项卡,并在此选项卡的旁边进一步依赖。

【讨论】:

【参考方案2】:

在我的情况下,由于在服务名称(如 mysql)之前缺少空格而导致的错误。希望这些信息可以帮助到别人!

【讨论】:

对我来说,这是一个额外的空间 空格和引号的错误使用是一样的。您可以在运行容器之前验证 Online YAML Parser 上的文件。这就是我所做的,在发生重大变化之后。【参考方案3】:

以后,您可以使用这个website 来检查它有什么问题,然后随时修复它。

编辑:

所以你在使用 docker-compose 文件时遇到的问题如下:

    你没有在版本后添加services:

    如果你想要最新的图像,你不必传递 :latest 标签,当你想要特定版本的图像时,你将传递标签,这是在 " "


代码应该是这样的:

version: '2'

services:
      ghost:
        image: ghost
        container_name: ghost-blog
        environment:
          - NODE_ENV=production
          - MYSQL_DATABASE=db-name
          - MYSQL_USER=user
          - MYSQL_PASSWORD=pass
      #   - "MAILGUN_USER=mailgun-user"
      #   - "MAILGUN_PASSWORD=mailgun-password" # Change mailgun-password
        volumes:
         - ./ghost:/var/lib/ghost # persist the data
        ports:
          - 2368:2368
        depends_on:
          - mysql # ensure that the database will always start first
        restart: always

      mysql:
        image: mysql
        container_name: ghost-db
        environment:
          - MYSQL_DATABASE=dbname # Change db-name
          - MYSQL_ROOT_PASSWORD=db-pass # Change root-password
          - MYSQL_USER=user # Change username
          - MYSQL_PASSWORD=sq-pass # Change db-password
        volumes:
          - ./db:/var/lib/mysql
        restart: always

【讨论】:

您发布的代码没有通过您推荐的解析器。 ` 错误:解析“”第 3 行第 2 列中的块映射时:ghost: ^ 预期 ,但在“”第 21 行找到“” ,第 3 列:mysql:` @JAstuccio 我已经编辑了我的代码。请看我制作的cmets 谢谢。它通过了解析器,但是当我复制你的新代码并更改密码时,我仍然遇到同样的错误。 @JAstuccio 是的,因为我已经在本地对其进行了测试,并且没有抛出任何错误

以上是关于如何修复我的 docker-compose.yml? - 预期 <block end>,但发现 '<block mapping start>'的主要内容,如果未能解决你的问题,请参考以下文章

如何验证我的 docker-compose.yml?

如何正确组合这个 docker-compose.yml?

如何使用 docker-compose.yml 和 ecs-cli 将 EBS 卷附加到我的容器

向 docker-compose.yml 公开随机端口

如何从 docker-compose.yml 更改 docker-compose.yml 中已安装卷的权限?

如何在 docker-compose.yml 中重建 docker 容器?