Docker Compose: Key 'version' is obsolete in specification — Решение
Эволюция спецификации Docker Compose (Compose Spec vs v1/v2/v3)
Предупреждение WARN the attribute version is obsolete, it will be ignored, please remove it генерируется современным CLI Docker Compose v2. Исторически директива version: '3.8' или version: '2.4' использовалась устаревшим Python-инструментом docker-compose (v1) для определения схемы валидации и поддержки конкретных параметров. В современном стандарте Compose Specification формат версионирования внутри файла упразднен: движок автоматически поддерживает все актуальные директивы спецификации.
Бизнес-риски:
Засорение логов CI/CD систем предупреждениями, ложное срабатывание строгих проверок качества кода (Quality Gates), потенциальные коллизии параметров при смешивании старых и новых директив.
Таблица эволюции форматов Docker Compose
| Версия / Стандарт | Исполняемый файл | Статус директивы version |
|---|---|---|
| Compose File Format v1 | docker-compose (Python) | Отсутствовала (устарела в 2016 г.) |
| Compose File Format v2 / v3 | docker-compose (Python) | Обязательна (version: '3.8') |
| Compose Specification | docker compose (Go CLI plugin) | Устарела (Obsolete / Ignored) |
Пошаговое обновление файла до актуальной спецификации Compose
Сценарий 1: Простое удаление верхней строки version
Откройте файл docker-compose.yml в любом текстовом редакторе и удалите директиву version на первой строке:
# Оставьте сразу блок определения сервисов:
services:
web:
image: nginx:alpine
ports:
- '80:80'
redis:
image: redis:alpineСценарий 2: Автоматическое удаление устаревшего ключа через CLI
Для массовой очистки репозиториев в автоматизированных пайплайнах:
# Валидация обновленного манифеста без атрибута version
docker compose config
# Запуск стека по спецификации Compose V2
docker compose up -dСценарий 3: Переименование файла в стандартное имя compose.yaml
Согласно современной спецификации, предпочтительным именем манифеста является compose.yaml вместо docker-compose.yml:
# Переименование в рекомендуемый стандартом формат:
mv docker-compose.yml compose.yaml
# Docker Compose автоматически найдет compose.yaml без дополнительных флагов:
docker compose up -dТиповые ошибки администраторов
- Откат на старый docker-compose (v1): Попытка установить устаревший python-пакет docker-compose v1 ради совместимости с версиями — грубая ошибка, так как v1 официально снят с поддержки.
- Удаление отступов в блоке services: При удалении верхней строки убедитесь, что блок
services:остался на нулевом уровне индентации (без пробелов перед словом).
ITSTM переведет ваши проекты на актуальные стандарты Compose Specification, оптимизирует пайплайны и обеспечит безопасность сред.
Частые вопросы (FAQ)
Сломается ли запуск контейнеров, если НЕ удалять строку version?
Нет. Docker Compose v2 выводит предупреждение (WARN), но полностью игнорирует значение атрибута и продолжает работу.
Поддерживаются ли параметры deploy.resources в compose.yaml без режима Swarm?
Да. В актуальной Compose Specification параметры deploy.resources.limits работают как в обычном docker compose up, так и в Swarm.
Какое расширение файла предпочтительнее: .yaml или .yml?
Официальная спецификация рекомендует имя compose.yaml, но файлы compose.yml, docker-compose.yaml и docker-compose.yml поддерживаются для обратной совместимости.
Как подавить вывод предупреждений в выводе CLI?
Лучший способ — удалить строку version. Временно можно скрыть предупреждения установкой переменной окружения: COMPOSE_IGNORE_ORPHANS=true.