Файл Docker-Compose имеет yaml.scanner.ScannerError
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 файла для разработки, указав его на целевые каталоги из разных модулей.
Что я здесь делаю неправильно?
Ответы
Ответ 1
Буквально нашли решение через несколько секунд. Вы должны удалить "обнаружение-микросервис" после "сборки":
version: '2'
services:
discovery-microservice:
build:
context: ./discovery-microservice/target/docker
dockerfile: Dockerfile
ports:
- "8761:8761"
Также вы можете использовать "./" в контексте для относительных путей.:)
Ответ 2
Хорошо, я потратил около 3 часов, чтобы отладить аналогичную проблему.
Если вы когда-нибудь получили ошибку ниже
ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
in ".\docker-compose.yml", line 2, column 9
Потому что вам нужно пространство между
version: '3' < - это неверно
version: '3' < - это правильно.
Кроме того, если вы используете eclipse, сделайте себе одолжение и установите плагин редактора YEdit YAML
Ответ 3
И я забыл :
после version
version '2'
Ответ 4
Что не так, что здесь:
build: discovery-microservice
вы начинаете сопоставление с ключом build
с отступом на четыре пробела. Значение для этого ключа - это скаляр, начинающийся с discovery-microservice
и возможный продолжается до следующей строки, в зависимости от того, имеет ли пара key: value
на том же уровне отступов или нет
То, что недопустимо внутри такого многострочного скаляра, состоит в том, что у вас есть некорректные :
и, которые находятся на другом уровне отступов. Это именно то, что у вас есть.
Анализ синтаксического анализатора context
с отступом на другом уровне, чем build
, предполагает, что вы пишете скалярную строку discovery-microservice context
, которая не может выполняться в той же строке (как context
) двоеточием.
Помимо удаления discovery-microservice
после сборки, как вы это делали в своем ответе, что бы также сделать этот допустимый YAML (но с другим значением, возможно, нечувствительным для докерного сочинения):
services:
discovery-microservice:
build: "discovery-microservice
context: /discovery-microservice/target/docker"
и
services:
discovery-microservice:
build: discovery-microservice
context: /discovery-microservice/target/docker"
Для файлов версии 2, поддерживающих докеры, ключ build
ожидает сопоставление (а не скаляр, как в приведенных выше "решениях" ), что делает ваш ответ правильным способом для решения этой проблемы.
Ответ 5
Приведу мой ответ, потому что, хотя я получил одно и то же сообщение об ошибке, мое решение было другим.
Оригинальный docker-compose.yml
volumes: mongo:
Перепробовав все идеи в этой теме, я просто пошел в доки-составные доки и понял, что тома должны быть структурированы следующим образом:
volumes:
mongo:
Это для всех, кто сталкивается с этим.
Ответ 6
Сегодня я столкнулся с подобной проблемой - синтаксической ошибкой в файле 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"
Я надеюсь, что это помогает кому-то с подобной проблемой.
Ответ 7
Привет дальнейшее обновление до данного ответа.... Это не конкретно о версии: строка '2.0' Заявление
ОШИБКА: yaml.scanner.ScannerError: значения сопоставления здесь недопустимы
значит там какая-то ошибка форматирования.
Я получил это, и это было, потому что мне не хватало вкладки в моем файле docker-compose
version: '3.0'
services:
mysql:
image: ...
вместо
version: '3.0'
services:
mysql:
image: ...
Обратите внимание на отсутствие вкладки отступа в строке изображения
Ответ 8
Другим возможным виновником могут быть случайные вкладки в конце файла, которые я узнал сегодня.
Ответ 9
Я хотел, чтобы том был сопоставлен с определенным путем на внешнем (хост) сервере. Я попытался поместить это в записи 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