Networking Docker Compose文件具有yaml.scanner.ScannerError:此处不允许映射值

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中为同一主机上的所有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
停止和启动最后一个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