Docker-Compose文件有yaml.scanner.ScannerError

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文件,将它指向来自不同模块的目标目录。
我在这里做错了什么?

几秒钟后,从字面上find了解决scheme。 你必须在“build”之后删除“discovery-microservice”:

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

您也可以在上下文中使用“./”作为相对path。 🙂

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

如果你们得到以下错误

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

因为你需要一个空间是需要的

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

版本:'3'< – 这是正确的。

另外,如果你使用的是eclipse,请自己动手,并安装YEdit YAML编辑器插件

这里有什么不对?

  build: discovery-microservice 

你开始一个有四个空格缩进的密钥build的映射。 该键的值是一个以discovery-microservice开头的标量,可能会延续到下一行,具体取决于在相同缩进级别是否具有key: value

在这样一个多行标量内部不允许的是你有一个没有引用的: 并且在不同的缩进级别上。 这正是你所拥有的。

parsing器看到的context在与build不同的级别上缩进,假定您正在编写一个标量stringdiscovery-microservice context ,这个discovery-microservice context不能在冒号的同一行(作为context )。

除了在构build之后去除discovery-microservice ,就像你在答案中所做的一样,还会使这个有效的YAML(但是具有不同的含义,可能对于docker组合是无意义的)是:

 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密钥需要一个映射(而不是像上面的“解决scheme”中的标量),使得你的答案是解决这个问题的正确方法。

我忘了: version

 version '2'