Файл 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