docker compose и docker-compose: в чём разница
docker compose (через пробел) — современный Docker Compose. Он встроен в команду docker как дополнение (plugin) и развивается. docker-compose (через дефис) — старая отдельная программа Compose v1 на Python. С июля 2023 года она не получает обновлений.
Используйте docker compose. Файлы docker-compose.yml от старой версии в ней почти всегда работают без изменений.
Как поставить и проверить
На Ubuntu и Debian с официальным репозиторием Docker:
sudo apt install docker-compose-plugin
docker compose versionС пакетами из репозитория Ubuntu — пакет docker-compose-v2. В Docker Desktop Compose уже есть.
Проверить, какая программа стоит у вас под именем docker-compose:
docker-compose versionЕсли номер версии начинается с 1. — это старая программа. Удалить её на Ubuntu: sudo apt remove docker-compose.
Что меняется при переходе
- Команда. Везде, где было
docker-compose up -d, пишитеdocker compose up -d. Подкоманды и ключи те же:up,down,logs,ps,pull,exec. - Имена контейнеров. Старая версия называла контейнеры через подчёркивание (
blog_db_1), новая — через дефис (blog-db-1). Скрипты, которые обращались к контейнерам по имени, нужно поправить. Надёжнее обращаться через Compose:docker compose exec db …вместоdocker exec blog_db_1 …. - Имя файла. Новое основное имя —
compose.yaml. Старыеdocker-compose.ymlиdocker-compose.yamlпо-прежнему находятся сами; если в папке есть оба имени, берётсяcompose.yaml. - Строка
version:. Старые файлы начинаются сversion: "3.8"или похожей строки. Новый Compose её не использует и выводит предупреждение, что она устарела. Просто удалите эту строку.
Почему «command not found»
docker-compose: command not found— старой программы нет, и это нормально. Наберитеdocker composeчерез пробел.docker: 'compose' is not a docker command— не установлено дополнение. Поставьтеdocker-compose-plugin(илиdocker-compose-v2, если Docker из пакетов Ubuntu).
Если инструкция написана для docker-compose
Старые статьи и README часто используют docker-compose. Переводите команды один в один, заменяя дефис на пробел: docker-compose -f prod.yml up -d → docker compose -f prod.yml up -d. Если инструкция советует скачать docker-compose с GitHub и положить в /usr/local/bin, — это установка старой версии, её делать не нужно.
Номера версий самого Compose после v2 продолжились как v5 — это тот же современный Compose с командой docker compose. Номер выводит docker compose version.