Networking Docker Compose文件具有yaml.scanner.ScannerError:此处不允许映射值
我的目标是在docker中为同一主机上的所有docker compose(我的所有域)使用1个网桥网络 我已经为docker compose基础设施配置了3个yml文件,我正在为所有这些基础设施使用1个外部网桥网络dockerprometheus_后端。 一个YAML文件用于反向代理(traefik),一个YAML文件用于每个域名(2个文件) 每次我试图用命令Networking Docker Compose文件具有yaml.scanner.ScannerError:此处不允许映射值,networking,docker-compose,yaml,external,Networking,Docker Compose,Yaml,External,我的目标是在docker中为同一主机上的所有docker compose(我的所有域)使用1个网桥网络 我已经为docker compose基础设施配置了3个yml文件,我正在为所有这些基础设施使用1个外部网桥网络dockerprometheus_后端。 一个YAML文件用于反向代理(traefik),一个YAML文件用于每个域名(2个文件) 每次我试图用命令docker compose-f mail.yml down和&docker compose-f mail.yml up-d停止和启动最后
docker compose-f mail.yml down和&docker compose-f mail.yml up-d
停止和启动最后一个YAML时,我得到:
yaml.scanner.ScannerError: mapping values are not allowed here
在对YML3中的大多数命令进行了注释之后,我了解到问题是在添加行name:dockerprometheus\u back-tier
但是在另外两个yml文件中,我已经做了完全相同的配置来使用这个网络,yaml处理器没有抱怨
YAML 1
version: '3'
networks:
internal:
external: false
prometheus:
external: true
name: dockerprometheus_back-tier
YAML 2
version: '3'
networks:
onlyinternal:
driver: bridge
external: false
prometheus:
external: true
name: dockerprometheus_back-tier
我应用dos2unix来清除yaml3上的编码,但没有改变任何东西。我直接复制了YAML3,保留了第一行,并试图启动它,但同样的错误也失败了。docker是否限制从外部文件使用3次相同的网桥网络?如何解决 Docker版本18.09.3,版本774a1f4,CentOS Linux版本7.6.1810(核心版) YAML 3:
version: '3'
networks:
mail_network:
driver: bridge
external: false
prometheus:
external: true
name: dockerprometheus_back-tier
您提供的所有三个YAML文档都有相同的问题,都是无效的 作为键
external
的值,您有一个多行无引号标量
true name: dockerprometheus_back-tier
在不带引号的标量中,不能有值指示符后跟空格,因为这可能表示一个新键。引用多行标量:
networks:
mail_network:
driver: bridge
external: false
prometheus:
external: "true
name: dockerprometheus_back-tier"
或者,如果名称
应该是与外部
处于相同级别的键,请确保其缩进如下:
networks:
mail_network:
driver: bridge
external: false
prometheus:
external: true
name: dockerprometheus_back-tier
在YAML中可以有如下内容:
prometheus:
external:
name: dockerprometheus_back-tier
当然,键不能同时具有标量节点(
true
)和映射节点('name:dockerprometheus\u back-tier')作为值欢迎使用。最好通过将代码块缩进四个空格来指示代码块(在代码块上使用:Ctrl+K)。您使用的三重反引号吞掉了行中的以下文本(version:3
),现在显示出来。您还应该注意,文件格式为YAML,自2006年以来,YAML文件的推荐扩展名为.YAML
。因此,我的问题得以解决,多亏了您!在您的答案后面加上两条备注:-->为什么您的上一个解决方案有效?因为“外部”键有一个“隐式空白”标量节点?-->你知道linux上一个好的命令行yml编辑器来帮助避免这种情况吗?我不知道编辑器,但是如果你有python3,你可以安装我的ruamel.yaml库,并从pathlib导入路径;从ruamel.yaml导入yaml;yaml().load(Path('3.yaml'))“,这将至少获得发生错误的3.yaml
中的行号和列。
prometheus:
external:
name: dockerprometheus_back-tier