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'