【问题标题】:Docker-Compose file has yaml.scanner.ScannerErrorDocker-Compose 文件有 yaml.scanner.ScannerError
【发布时间】:2016-12-28 21:16:30
【问题描述】:

compose.yml 文件,如下所示:

version: '2'
services:
  discovery-microservice:
    build: discovery-microservice
      context: /discovery-microservice/target/docker
      dockerfile: Dockerfile
  ports:
   - "8761:8761"

当我执行它时,我收到以下错误:

yaml.scanner.ScannerError: mapping values are not allowed here
in "C:\...\docker-compose.yml", line 5, column 14

据我所知,格式没有问题,例如缺少空格。我的总体目标是指定一个开发模式 docker-compose 文件,将其指向不同模块的目标目录。
我在这里做错了什么?

【问题讨论】:

  • 这是因为 context:dockerfile: 向前移动 - 将它们与 build: 对齐。

标签: docker yaml docker-compose dockerfile


【解决方案1】:

好的,我浪费了大约 3 个小时来调试类似的问题。

如果你们遇到以下错误

ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
in ".\docker-compose.yml", line 2, column 9

因为中间需要一个空格

version:'3'

version: '3'

另外,如果您使用的是 eclipse,请帮自己一个忙,安装 YEdit YAML 编辑器插件

【讨论】:

  • 它对新手非常有用的答案
  • 这个插件绝对可以挽救生命
  • 我也遇到过类似的问题,但实际上当你使用带有足够插件的编辑器时,由于着色语法,你可以避免这样的错误!
  • 我的变种是我在单词 version 'version*:* 3' 之后缺少冒号
【解决方案2】:

字面上几秒钟后找到了解决方案。您必须在“构建”之后删除“发现微服务”:

version: '2'
services:
  discovery-microservice:
    build:
      context: ./discovery-microservice/target/docker
      dockerfile: Dockerfile
    ports:
     - "8761:8761"

您还可以在上下文中使用“./”作为相对路径。 :)

【讨论】:

  • 在它自己的默认值上构建 [context]。如果添加 args,则需要将 [contex] 向下移动并自行构建
  • 谢谢这是问题所在。我有 build: . 现在删除了“。”它工作正常
【解决方案3】:

我在version之后忘记了:

version '2'

【讨论】:

    【解决方案4】:

    这里有什么问题:

        build: discovery-microservice
    

    您启动了一个映射,它的键 build 缩进了四个空格。该键的值是一个标量,以discovery-microservice 开头,并且可能继续到下一行,这取决于它是否有key: value在相同的缩进级别

    在这样的多行标量中不允许的是,您有一个未引用的 :并且 具有不同的缩进级别。这正是你所拥有的。

    看到context 缩进与build 不同级别的解析器假定您正在编写一个标量字符串discovery-microservice context,它不能在同一行(如context)后跟冒号。

    除了像您在回答中所做的那样在构建后删除discovery-microservice 之外,还有什么可以使这个有效的 YAML(但具有不同的含义,对于 docker compose 可能毫无意义)是:

    services:
      discovery-microservice:
        build: "discovery-microservice
          context: /discovery-microservice/target/docker"
    

    services:
      discovery-microservice:
        build: discovery-microservice
        context: /discovery-microservice/target/docker"
    

    对于 docker-compose 版本 2 文件,build 键需要一个映射(而不是上面“解决方案”中的标量),从而使您的答案成为解决此问题的正确方法。

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,我认为可能是您的 yaml 文件格式无效。所以为了解决它,首先我们需要确保我们的yaml文件格式是有效的

      下面是你的原始代码sn-p

      version: '2'
      services:
        discovery-microservice:
          build: discovery-microservice
            context: /discovery-microservice/target/docker
            dockerfile: Dockerfile
        ports:
         - "8761:8761"
      

      如果我们使用http://www.yamllint.com/检查yaml文件,我们会得到如下错误:

      那我们改成如下:

      services: 
        discovery-microservice: 
          build: discovery-microservice
          context: /discovery-microservice/target/docker
          dockerfile: Dockerfile
        ports: 
          - "8761:8761"
      version: "2"
      

      检查后,我们会得到如下结果:

      【讨论】:

        【解决方案6】:

        带来我的答案是因为虽然我收到了相同的错误消息,但我的解决方案却不同。

        原始 docker-compose.yml

        volumes: mongo:
        

        在尝试了这个线程中的所有想法后,我刚刚去了 docker-compose docks 并意识到卷的结构应该如下:

        volumes:
          mongo:
        

        对于遇到此问题的其他人来说就是这样。

        【讨论】:

          【解决方案7】:

          还要确保您的上下文和 dockerfile 具有相同的标识。我犯了一个错误,被困了好几个小时。

          我的错误是

          错误:yaml.scanner.ScannerError:此处不允许映射值 在“./docker-compose.yml”中,第 6 行,第 19 列

          错误:

          version : '3'
          services:
            test:
              build:
                context: ./test
                  dockerfile: Dockerfile.test
              image: kpod/test:2020
          

          对:

          version : '3'
          services:
            test:
              build:
                context: ./test
                dockerfile: Dockerfile.test
              image: kpod/test:2020
          

          【讨论】:

            【解决方案8】:

            您好,对给定答案的进一步更新....这与版本无关:'2.0'行 声明

            错误:yaml.scanner.ScannerError:此处不允许映射值

            表示存在某种格式错误。

            我知道了,这是因为我的 docker-compose 文件中缺少一个选项卡

            version: '3.0'
            services:
              mysql:
              image: ...
            

            而不是

            version: '3.0'
            services:
              mysql:
                image: ...
            

            注意图片行没有缩进标签

            【讨论】:

            • 是的 indenting ,那是我犯的错误。我使用version : '3'
            【解决方案9】:

            如果您使用的是vs code,请帮自己一个忙,安装“RedHat”的YAML 扩展。

            【讨论】:

              【解决方案10】:

              1) 在定义键后进行映射时,在每个冒号后留一个空格。

              2) YAML 文件使用 2(两个空格或制表符)缩进。 -->意思是每行之后你需要使用两个制表符,当你在下一行写一个句子时。 我希望现在可以轻松编写任何 YAML 文件。

              【讨论】:

                【解决方案11】:

                使用 vs code yaml RedHat 扩展,我看到我缩进了一个:

                错误:

                version: '3'
                
                services:
                
                  web:
                    image: nginx
                     ports:
                    - 9090:80
                
                  database:
                    image: redis
                

                对:

                version: '3'
                
                services:
                
                  web:
                    image: nginx
                    ports:
                    - 9090:80
                
                  database:
                    image: redis
                

                【讨论】:

                  【解决方案12】:

                  我发现少了一个":",就足以产生上述错误

                  【讨论】:

                  • 结肠盲!
                  【解决方案13】:

                  我今天遇到了类似的问题,docker-compose.yml 文件中的语法错误导致了同样的错误。

                  version: '2'
                  services:
                  // Add your services here
                    discovery-microservice:
                      build: discovery-microservice
                        context: ./discovery-microservice/target/docker
                        dockerfile: Dockerfile
                    ports:
                     - "8761:8761"
                  

                  删除这一行 // Add your services here 解决了我的问题

                  version: '2'
                  services:
                    discovery-microservice:
                      build:
                        context: ./discovery-microservice/target/docker
                        dockerfile: Dockerfile
                      ports:
                       - "8761:8761"
                  

                  我希望这对遇到类似问题的人有所帮助。

                  【讨论】:

                  • 一些程序员可能认为因为 BCPL 有 // 作为行尾的 cmets,所以任何有四个字母缩写的东西都会有这些。 YAML cmets 以 # 开头,前面有空格(包括换行符)。
                  【解决方案14】:

                  另一个可能的罪魁祸首是文件末尾的杂散标签,这是我今天了解到的。

                  【讨论】:

                  • 欢迎来到Stack Overflow。对 docker-compose 用于解析 YAML 的 PyYAML 源非常熟悉,我认为尾随制表符不可能导致“不允许映射错误”错误。请提供一个最小示例来支持您的主张。
                  【解决方案15】:

                  我想要一个卷映射到外部(主机)服务器上的特定路径。我尝试将其放在docker-compose.yml 的顶级volumes 条目下。在查看了 docker-compose 文件文档后,我意识到那种类型的卷不在那里。相反,它仅位于容器定义中的 volumes 条目下。例如:

                  version: "3.7"
                  services:
                    web:
                      image: my_custom_web_image
                      build: ./app
                      volumes:
                        - ./app/subdir:/usr/src/app/subdir
                  

                  【讨论】:

                    【解决方案16】:

                    检查你的空格by validating your YAML input.

                    我花了 1 小时才找到答案。

                    【讨论】:

                      【解决方案17】:

                      所以,还有另一个原因! 当您尝试使用 Github 中的 setup.sh 安装 r=Redash 时,脚本会自动获取最新版本的 Redash 并将其放入 docker-compose.yml 中。基本 yml 文件在版本名称周围没有单引号 (')!结果,您会收到一条错误消息:

                      错误:yaml.scanner.ScannerError:此处不允许映射值 在“./docker-compose.yml”中,第 3 行,第 23 列 您只需在 Redash 版本周围添加单引号:

                      version: "2"
                      x-redash-service: &redash-service
                        image: 'redash/redash:8.0.0.b32245'

                      【讨论】:

                        【解决方案18】:

                        检查之间的空格

                        端口:

                        - _space_ "8080:8080"

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2018-04-30
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多