Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
scanner-error-mapping-values Linux / DevOps

Docker Compose: yaml.scanner.ScannerError: mapping values are not allowed

Обновлено: 19.08.2026  ·  Официальная база знаний

Синтаксический анализ YAML-спецификаций в Docker Compose

Ошибка yaml.scanner.ScannerError: mapping values are not allowed here in docker-compose.yml возникает на этапе парсинга файла манифеста библиотекой PyYAML / Go-YAML. В стандарте YAML структура определяется строгими отступами (индентацией). Ошибка указывает на синтаксический конфликт: наличие символа табуляции вместо пробелов, пропущенный пробел после двоеточия (например, image:nginx вместо image: nginx), неэкранированные спецсимволы в строках или нарушение иерархии вложенности ключей словаря (mapping).

Бизнес-риски:

Полная остановка развертывания стеков сервисов через автоматизированные пайплайны, блокировка локального окружения разработчиков, сбои при деплое hotfix-обновлений.

Таблица критических синтаксических правил YAML

Конструкция / ПравилоНекорректный синтаксис (Ошибка)Корректный синтаксис
Разделитель ключа и значенияenvironment:DEBUG=trueenvironment: DEBUG=true (Обязателен пробел после ':')
Отступы вложенностиИспользование символа TabИспользование ровно 2 пробелов на уровень.
Элементы списков-name: app- name: app (Пробел после дефиса)
Спецсимволы в строкахcommand: echo hello:worldcommand: 'echo hello:world' (Кавычки)

Пошаговый аудит и валидация файла docker-compose.yml

Сценарий 1: Поиск и замена символов табуляции на пробелы

YAML категорически запрещает использование символов Tab. Проверьте и очистите файл через CLI:

# Проверка наличия символов табуляции через cat
cat -v -T -e docker-compose.yml

# Валидация структуры файла через встроенный синтаксический анализатор
docker compose config

Сценарий 2: Валидация файла через встроенный инструмент Compose Config

Используйте встроенный синтаксический анализатор Docker Compose для локализации точной строки ошибки:

# Валидация структуры и переменных без запуска контейнеров:
docker compose config

# Если используется python-утилита yamllint:
yamllint docker-compose.yml

Сценарий 3: Исправление типовых ошибок с кавычками и двоеточиями

Экранируйте строки, содержащие зарезервированные символы:

services:
  app:
    image: node:18-alpine
    command: 'yarn run start:prod'
    environment:
      DATABASE_URL: 'postgres://user:p@ss:5432/db'

Типовые ошибки администраторов

  • Копирование примеров из браузера/мессенджеров: При копировании часто вставляются невидимые неразрывные пробелы, ломающие парсер.
  • Смешивание форматов списков и словарей в environment: Нельзя одновременно использовать синтаксис KEY: value и - KEY=value внутри одного блока.
Ошибки конфигураций Compose и манифестов тормозят разработку?
ITSTM проведет стандартизацию CI/CD пайплайнов, внедрит автоматические линтеры (yamllint, pre-commit) и обучит команду лучшим практикам Infrastructure-as-Code.
Практический опыт инженера: Обязательно добавьте этап 'docker compose config -q' в pre-commit хуки Git и начальный шаг CI-пайплайна. Это предотвратит попадание синтаксически битых конфигураций в production-репозиторий.

Частые вопросы (FAQ)

Как быстро найти невидимые спецсимволы в docker-compose.yml?

Используйте команду 'cat -v -T -e docker-compose.yml'. Символы Tab отобразятся как '^I', а концы строк как '$'.

Почему ошибка указывает на строку 15, хотя опечатка на строке 12?

Парсер YAML читает блоки до конца структуры. Если на строке 12 пропущен отступ, парсер понимает несоответствие структуры только на следующей строке.

Можно ли настроить VS Code для автоматического форматирования YAML?

Да, установите расширение 'YAML' от Red Hat и включите параметры 'editor.insertSpaces: true' и 'editor.tabSize: 2'.

В чем разница между командами docker-compose (v1) и docker compose (v2)?

Версия v1 написана на Python и выдает трейс PyYAML. Версия v2 встроена в Docker CLI на языке Go и выдает более точные сообщения об ошибках парсинга.