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

时间:2019-03-24 11:06:29

标签: networking docker-compose yaml external

我的目标是在docker中为我所有的域中的所有docker-compose使用1个桥接网络。

我已经为我的docker-compose基础架构配置了3个yml文件,并且所有这些我都使用了1个外部桥接网络dockerprometheus_back-tier。 一个YAML文件用于反向代理(traefik),每个域名一个YAML文件(两个文件)。

每次我尝试使用命令docker-compose -f mail.yml down && docker-compose -f mail.yml up -d停止并启动最后一个YAML时,我都会得到:

yaml.scanner.ScannerError: mapping values are not allowed here

在注释了yml 3中的大多数命令后,我了解到问题出在我添加行name: dockerprometheus_back-tier

但是在其他2个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


docker network ls
04e3348408c4        dockerprometheus_back-tier    bridge              local

我应用了dos2unix来清理YAML 3上的编码,但没有任何改变。我直接制作了YAML 3的副本,保留了第一行,然后尝试启动它,但是它也因相同的错误而失败。码头工人在使用来自外部文件的相同网桥网络的3倍时是否存在限制?如何解决?

Docker版本18.09.3,内部版本774a1f4,CentOS Linux版本7.6.1810(Core)

YAML 3:

version: '3'

networks:
  mail_network:
    driver: bridge
    external: false
  prometheus:
    external: true
      name: dockerprometheus_back-tier

1 个答案:

答案 0 :(得分:0)

您提供的所有三个YAML文档都存在相同的问题,并且都无效。

作为键external的值,您有多行未引用的标量

true name: dockerprometheus_back-tier

在未加引号的标量内,您不能在其后有空格的值指示符,因为这可能表示新的键。引用多行标量:

networks:
  mail_network:
    driver: bridge
    external: false
  prometheus:
    external: "true
      name: dockerprometheus_back-tier"

或者如果name是与external相同级别的键,请确保其缩进方式如下:

networks:
  mail_network:
    driver: bridge
    external: false
  prometheus:
    external: true
    name: dockerprometheus_back-tier

YAML中可以包含以下内容:

  prometheus:
    external:
      name: dockerprometheus_back-tier

但是,当然,键不能同时具有标量节点(true作为映射节点('name:dockerprometheus_back-tier')