[英]Docker-Compose file has 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 文件,将其指向不同模块的目标目录。
我在这里做错了什么?
好吧,我浪费了大约 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: '2'
services:
discovery-microservice:
build:
context: ./discovery-microservice/target/docker
dockerfile: Dockerfile
ports:
- "8761:8761"
您也可以在相对路径的上下文中使用“./”。 :)
我忘了:
version
之后
version '2'
这里有什么问题:
build: discovery-microservice
你开始一个映射,它有一个由四个空格缩进的键build
。 该键的值是一个以discovery-microservice
开头的标量,可能会继续到下一行,具体取决于它是否具有相同缩进级别的key: value
对
在这样的多行标量中不允许的是你有一个不带引号的:
并且在不同的缩进级别。 这正是你所拥有的。
解析器看到context
缩进与build
不同的级别假设您正在编写一个标量字符串discovery-microservice context
,该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
键需要一个映射(而不是上面“解决方案”中的标量),使您的答案成为解决此问题的正确方法。
提出我的答案是因为虽然我收到了相同的错误消息,但我的解决方案却有所不同。
原始 docker-compose.yml
volumes: mongo:
在尝试了此线程中的所有想法后,我刚刚去了 docker-compose 码头,并意识到卷的结构应如下所示:
volumes:
mongo:
这就是其他人遇到的情况。
还要确保您在同一标识中具有上下文和 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
嗨,对给定答案的进一步更新......这不是特别关于版本:'2.0'行声明
错误:yaml.scanner.ScannerError:此处不允许映射值
意味着存在某种格式错误。
我明白了,这是因为我的 docker-compose 文件中缺少一个选项卡
version: '3.0'
services:
mysql:
image: ...
而不是
version: '3.0'
services:
mysql:
image: ...
请注意图像行上缺少缩进标签
如果您正在使用vs code
请帮自己一个忙,并通过“RedHat”安装YAML
扩展。
使用 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
我发现缺少一个":"
就足以产生上述错误
我遇到了同样的问题,我认为可能是您的 yaml 文件格式无效。 所以为了解决它,首先我们需要确保我们的yaml文件格式是有效的
下面是您的原始代码片段
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"
检查后,我们将得到如下结果:
我今天遇到了类似的问题, 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"
我希望这可以帮助有类似问题的人。
另一个可能的罪魁祸首可能是文件末尾的杂散标签,这是我今天了解到的。
我想要一个映射到外部(主机)服务器上特定路径的卷。 我试着把它放在docker-compose.yml
的顶级volumes
条目docker-compose.yml
。 在查看 docker-compose 文件文档后,我意识到这种类型的卷不会出现在那里。 相反,它仅位于容器定义中的volumes
条目下。 例如:
version: "3.7"
services:
web:
image: my_custom_web_image
build: ./app
volumes:
- ./app/subdir:/usr/src/app/subdir
通过验证您的 YAML 输入来检查您的空格。
我花了1小时才知道。
1)在定义键后进行映射时,在每个冒号后给一个空格。
2) YAML 文件使用 2 个(两个空格或制表符)缩进。 --> 意思是在每一行之后你需要使用两个制表符,当你在下一行写一个句子时。 我希望现在可以轻松编写任何 YAML 文件。
所以,还有一个原因! 当您尝试使用 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'
检查之间的空间
端口:
- _space_ "8080:8080"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.