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

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

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

Docker Compose: Key 'version' is obsolete in specification — Решение

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

Эволюция спецификации 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 v1docker-compose (Python)Отсутствовала (устарела в 2016 г.)
Compose File Format v2 / v3docker-compose (Python)Обязательна (version: '3.8')
Compose Specificationdocker 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: остался на нулевом уровне индентации (без пробелов перед словом).
Требуется масштабная модернизация и аудит Docker-инфраструктуры?
ITSTM переведет ваши проекты на актуальные стандарты Compose Specification, оптимизирует пайплайны и обеспечит безопасность сред.
Практический опыт инженера: Удаление атрибута version открывает доступ к новым возможностям Compose Spec, таким как динамические профили (profiles), расширенные проверки include для слияния нескольких файлов и поддержка блоков secrets на уровне хоста.

Частые вопросы (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.