Файл Docker-Compose содержит ошибку yaml.scanner.ScannerError: значения сопоставления здесь не разрешены - PullRequest
1 голос
/ 24 марта 2019

Моя цель - использовать 1 мостовую сеть в докере для всех моих docker-compose на одном хосте, для всех моих доменов.

Я настроил файл 3 yml для моей инфраструктуры docker-compose, и я использую для всех из них один сетевой мост dockerprometheus_back-tier. Один файл YAML для обратного прокси-сервера (traefik) и один файл YAML для каждого доменного имени (2 файла).

Каждый раз, когда я пытаюсь остановить и запустить последний YAML с помощью команды docker-compose -f mail.yml down && docker-compose -f mail.yml up -d, я получаю:

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, сохранив первые строки и пытаясь запустить его, но он тоже не удался с той же ошибкой. Есть ли ограничение в Docker, чтобы использовать 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 голосов
/ 24 марта 2019

У всех трех представленных вами документов 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')

...