Docker Compose: yaml.scanner.ScannerError: mapping values are not allowed
Синтаксический анализ 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=true | environment: DEBUG=true (Обязателен пробел после ':') |
| Отступы вложенности | Использование символа Tab | Использование ровно 2 пробелов на уровень. |
| Элементы списков | -name: app | - name: app (Пробел после дефиса) |
| Спецсимволы в строках | command: echo hello:world | command: '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внутри одного блока.
ITSTM проведет стандартизацию CI/CD пайплайнов, внедрит автоматические линтеры (yamllint, pre-commit) и обучит команду лучшим практикам Infrastructure-as-Code.
Частые вопросы (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 и выдает более точные сообщения об ошибках парсинга.