Тестовый Docker Compose затронул production: как разделить проекты

Две копии Compose запускаются на одном Docker-хосте и неожиданно используют общие ресурсы. Разные каталоги или файлы не всегда означают надёжную изоляцию. Нужно явно понимать имена проектов, внешние ресурсы и опубликованные порты.

Как разобрать ситуацию

Project name участвует в группировке ресурсов Compose. Для теста и production задайте различимые имена и проверьте итоговые зависимости. При этом вручную заданные имена контейнеров, внешние сети и явно общие volumes могут обойти ожидаемое разделение. Имя проекта также не создаёт отдельный физический сервер и не ограничивает ресурсное влияние соседних процессов.

Пример и ожидаемый результат

Учебные проекты training-test и training-prod имеют одинаковые сервисы api и db. Отдельные имена помогают различать созданные Compose ресурсы, но опубликованный порт 8080 на одном хосте одновременно занять обоим не удастся.

docker compose ls
docker compose -p training-test config --services

Ожидаемый результат — понятные независимые списки ресурсов двух проектов и отсутствие случайных общих записей. Диагностика начинается с описания проектов и итоговой конфигурации, а не с удаления чужих контейнеров.

Проверка перед применением

  • Проверьте наличие container_name и внешних сетей или томов: они требуют отдельного решения.
  • Согласуйте разные host-порты либо отдельные маршруты прокси.
  • Убедитесь, что test не получил credential рабочей базы, даже если контейнеры называются по-разному.

Перед любым массовым действием в скрипте выпуска выводите выбранный проект и целевое окружение безопасным способом. Если оператор видит только короткое api, ошибка контекста становится слишком лёгкой. Для восстановления храните карту внешних ресурсов отдельно: Compose не обязан владеть всем, к чему подключается приложение.

Границы решения

Project name не является полноценной границей безопасности. Общий Docker daemon и хост остаются общими. Здесь приведены команды чтения; запуск, остановка и удаление проектов не выполнялись.

Если требуется самостоятельно собирать образ, связывать сервисы и разбирать поломки окружения, посмотрите программу нашего платного курса

Docker и Docker Compose: контейнеризация приложений. Перед записью сравните программу со своей задачей и подготовкой.

Техническая справка: docs.docker.com: документация.

Следующий шаг: Docker для разработчика: разборы запуска и хранения данных. По смежным вопросам: Docker каждый раз заново ставит зависимости: как проверить порядок COPY, Переменная окружения в Docker Compose не обновилась: где искать значение.