Docker-Compose文件有yaml.scanner.ScannerError

Ske*_*ton 38 yaml docker dockerfile docker-compose

compose.yml 文件,看起来像这样:

version: '2'
services:
  discovery-microservice:
    build: discovery-microservice
      context: /discovery-microservice/target/docker
      dockerfile: Dockerfile
  ports:
   - "8761:8761"
Run Code Online (Sandbox Code Playgroud)

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

yaml.scanner.ScannerError: mapping values are not allowed here
in "C:\...\docker-compose.yml", line 5, column 14
Run Code Online (Sandbox Code Playgroud)

从我看来,格式没有任何问题,例如缺少空格.我的总体目标是指定开发模式docker-compose文件,将其指向不同模块的目标目录.
我在这做错了什么?

vir*_*ous 75

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

如果你们得到以下错误

ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
in ".\docker-compose.yml", line 2, column 9
Run Code Online (Sandbox Code Playgroud)

因为你需要一个空间

版本:'3'< - 这是错误的

版本:'3'< - 这是正确的.

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

  • 它对新来者非常有用的答案 (2认同)

Ske*_*ton 17

几秒后逐字逐句地找到解决方案.您必须在"构建"之后删除"discovery-microservice":

version: '2'
services:
  discovery-microservice:
    build:
      context: ./discovery-microservice/target/docker
      dockerfile: Dockerfile
    ports:
     - "8761:8761"
Run Code Online (Sandbox Code Playgroud)

您也可以在相关路径的上下文中使用"./".:)

  • 建立在它自己的默认设置上来构建 [context]。如果添加 args,则需要将 [contex] 向下移动并自行构建 (2认同)

vla*_*ras 16

我忘了:version

version '2'
Run Code Online (Sandbox Code Playgroud)


Ant*_*hon 6

这有什么问题:

    build: discovery-microservice
Run Code Online (Sandbox Code Playgroud)

你启动一个映射,其中有一个键build缩进四个空格.该密钥的值是与开始标量discovery-microservice和可能继续到下一行,这取决于是否具有key: value一对在相同缩进级别或不

在这样的多行标量中不允许的是你有一个不带引号: 并且具有不同缩进级别的那个.这正是你所拥有的.

解析器context在不同的级别缩进,而不是build假设您正在编写一个标量字符串discovery-microservice context,该字符串不能通过context冒号在同一行(as )上跟踪.

除了discovery-microservice在你的答案中删除之后,还有什么能使这个有效的YAML(但具有不同的含义,对于docker compose可能没有意义)是:

services:
  discovery-microservice:
    build: "discovery-microservice
      context: /discovery-microservice/target/docker"
Run Code Online (Sandbox Code Playgroud)

services:
  discovery-microservice:
    build: discovery-microservice
    context: /discovery-microservice/target/docker"
Run Code Online (Sandbox Code Playgroud)

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


luc*_*umt 5

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

下面是你的原始代码片段

version: '2'
services:
  discovery-microservice:
    build: discovery-microservice
      context: /discovery-microservice/target/docker
      dockerfile: Dockerfile
  ports:
   - "8761:8761"
Run Code Online (Sandbox Code Playgroud)

如果我们使用http://www.yamlint.com/检查yaml文件,我们会得到如下错误: 在此输入图像描述

然后我们将其更改如下:

services: 
  discovery-microservice: 
    build: discovery-microservice
    context: /discovery-microservice/target/docker
    dockerfile: Dockerfile
  ports: 
    - "8761:8761"
version: "2"
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述