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文件,将其指向不同模块的目标目录 我在这里做错了什么?
答案 0 :(得分:54)
好的,我浪费了大约3个小时来调试类似的问题。
如果你们得到以下错误
ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
in ".\docker-compose.yml", line 2, column 9
因为你需要一个空间
版本:'3'< - 这是错误的
版本:'3'< - 这是正确的。
另外,如果您正在使用eclipse,请帮个忙并安装YEdit YAML编辑器插件
答案 1 :(得分:14)
我在:
version
version '2'
答案 2 :(得分:14)
几秒钟后逐字逐句地找到解决方案。您必须删除" discovery-microservice"在" build":
之后version: '2'
services:
discovery-microservice:
build:
context: ./discovery-microservice/target/docker
dockerfile: Dockerfile
ports:
- "8761:8761"
你也可以使用" ./"在相对路径的上下文中。 :)
答案 3 :(得分:5)
这里有什么问题:
build: discovery-microservice
启动一个映射,其中键build
缩进四个空格。该键的值是一个以discovery-microservice
开头的标量,可能会继续到下一行,具体取决于是否在同一缩进级别1>对{strong>
在这样的多行标量中不允许的是,您有一个不带引号的key: value
和具有不同的缩进级别。这正是你所拥有的。
看到:
缩进到与context
不同的级别的解析器假设您正在编写一个标量字符串build
,该字符串不能在同一行上跟踪(discovery-microservice context
)用冒号。
除了在你的答案中删除context
之后,还有什么能使这个有效的YAML(但具有不同的含义,对于docker compose可能没有意义)是:
discovery-microservice
和
services:
discovery-microservice:
build: "discovery-microservice
context: /discovery-microservice/target/docker"
对于docker-compose版本2文件,services:
discovery-microservice:
build: discovery-microservice
context: /discovery-microservice/target/docker"
键需要映射(而不是上面的"解决方案"中的标量),使您的答案成为解决此问题的正确方法。
答案 4 :(得分:2)
还要确保您的上下文和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
答案 5 :(得分:2)
带上我的答案,因为虽然我收到相同的错误消息,但解决方案却不同。
原始docker-compose.yml
volumes: mongo:
尝试了该线程中的所有想法之后,我进入了docker-compose码头,并意识到卷的结构应如下:
volumes:
mongo:
就是其他人遇到的问题。
答案 6 :(得分:1)
我遇到了同样的问题,我认为可能是您的 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"
检查后,我们将得到如下结果:
答案 7 :(得分:1)
使用vs代码yaml RedHat扩展,我发现自己缩进了一个凹痕:
错误:
print(json.dumps(entry))
import sys
sys.stdout.flush()
右:
version: '3'
services:
web:
image: nginx
ports:
- 9090:80
database:
image: redis
答案 8 :(得分:1)
如果您使用的是vs code
,请帮个忙,并通过“ RedHat”安装YAML
扩展名。
答案 9 :(得分:0)
我想要一个映射到外部(主机)服务器上特定路径的卷。我尝试将其放在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
答案 10 :(得分:0)
检查您的空格by validating your YAML input.
我花了1个小时来找出答案。
答案 11 :(得分:0)
1)每当定义键后进行映射时,在每个冒号后都留一个空格。
2)YAML文件使用2(两个空格或制表符)缩进。 ->这意味着每行之后,当您在下一行中写一个句子时,您需要使用两个选项卡。 我希望这可以使现在轻松编写任何YAML文件。
答案 12 :(得分:0)
因此,还有另一个原因! 当您尝试使用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'
答案 13 :(得分:0)
另一个可能的罪魁祸首是文件结尾处的杂乱标签,这是我今天了解到的。
答案 14 :(得分:0)
您好,将其更新为给定的答案....并非专门针对版本:“ 2.0”行 声明
错误:yaml.scanner.ScannerError:此处不允许使用映射值
意味着存在某种格式错误。
我明白了,那是因为我在docker-compose文件中缺少一个标签页
import { Directive, ElementRef, Renderer2, HostListener } from '@angular/core';
import { NgControl } from '@angular/forms';
@Directive({
selector: '[appSsnMask]'
})
export class SsnMaskDirective {
visible = false;
toggleElem;
toggleElemATag;
toggleElemITag;
parentElem;
inputElem;
private value: any;
private element: HTMLInputElement;
constructor(
private elem: ElementRef,
private renderer: Renderer2,
public formControl: NgControl
) {
this.element = elem.nativeElement;
}
ngOnInit() {
this.inputElem = this.elem.nativeElement;
this.parentElem = this.inputElem.parentElement;
// create toggle button
this.toggleElem = this.renderer.createElement('span');
this.toggleElemATag = this.renderer.createElement('a');
this.toggleElemITag = this.renderer.createElement('i');
this.renderer.addClass(this.toggleElemITag, 'fa');
this.renderer.addClass(this.toggleElemITag, 'fa-eye');
// append toggle element to input element holder
this.renderer.appendChild(this.toggleElem, this.toggleElemATag);
this.renderer.appendChild(this.toggleElemATag, this.toggleElemITag);
this.renderer.appendChild(this.parentElem, this.toggleElem);
// listen to event on toggle button
this.renderer.listen(this.toggleElemATag, 'mousedown', this.toggleMask.bind(this));
this.value = this.element.value;
this.maskValue(true);
}
toggleMask(e) {
e.preventDefault();
this.visible = !this.visible;
if (this.visible) {
this.showSlashIcon();
} else {
this.showEyeIcon();
}
this.maskValue(!this.visible);
}
eyeStatus(status) {
if (status) {
this.showEyeIcon();
} else {
this.showEyeIcon();
}
}
showSlashIcon() {
this.renderer.removeClass(this.toggleElemITag, 'fa-eye');
this.renderer.addClass(this.toggleElemITag, 'fa-eye-slash');
}
showEyeIcon() {
this.renderer.removeClass(this.toggleElemITag, 'fa-eye-slash');
this.renderer.addClass(this.toggleElemITag, 'fa-eye');
}
@HostListener('input')
onChange() {
this.value = this.element.value;
this.maskValue(!this.visible);
}
@HostListener('focus')
focusListener() {
this.renderer.appendChild(this.parentElem, this.toggleElem);
}
@HostListener('blur')
blurListener() {
if (this.formControl.control.invalid && this.formControl.control.errors
&& this.formControl.control.dirty && this.formControl.control.touched) {
this.renderer.removeChild(this.parentElem, this.toggleElem);
} else {
this.renderer.appendChild(this.parentElem, this.toggleElem);
}
}
maskValue(status) {
if (status) {
this.element.value = this.element.value.replace(/[0-9]/g, 'x');
} else {
this.element.value = this.value;
}
}
}
代替
version: '3.0'
services:
mysql:
image: ...
请注意图像行上没有缩进标签
答案 15 :(得分:0)
检查之间的空格
端口:
-_space_“ 8080:8080”
答案 16 :(得分:0)
我发现缺少一个":"
足以产生上述错误
答案 17 :(得分:0)
我今天遇到了类似的问题,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"
我希望这可以帮助有类似问题的人。