Docker Compose stop: остановить контейнеры без удаления

Категория: docker · Язык: Bash · Обновлено:

docker compose stop отправляет контейнерам SIGTERM, ждёт stop_grace_period и при необходимости добивает их SIGKILL. Контейнеры, сети и тома остаются на месте, поэтому потом можно выполнить docker compose start и продолжить с теми же данными. Это отличается от down, который удаляет контейнеры и сети.

Остановить и снова запустить проект

Bash
docker compose stop
docker compose ps -a
docker compose start
docker compose down

stop полезен, когда нужно освободить ресурсы, не теряя состояние контейнеров. ps -a покажет статус exited, а start запустит те же контейнеры без пересоздания. down останавливает и удаляет контейнеры и сети; тома удаляются только с флагом -v. Если нужно пересобрать образ, используйте up --build, а не start.

Задать таймаут и выбрать сервис

Bash
docker compose stop --timeout 30 api
docker compose kill worker

--timeout переопределяет время ожидания для конкретного запуска. В compose.yaml можно задать stop_grace_period: 30s для сервиса, который долго завершает запросы. kill отправляет SIGKILL сразу и не даёт приложению корректно закрыться; используйте его только как крайнюю меру.

stop не удаляет данные в named volumes и не меняет образы. down с --volumes удалит и тома — это удобно для тестов, но опасно для локальной базы. restart выполняет stop + start, а up может пересоздать контейнер при изменении конфигурации. Для миграций и one-shot задач дождитесь завершения через docker compose wait.

Проверяйте, что приложение обрабатывает SIGTERM: закрывает соединения с базой, перестаёт принимать запросы и завершает текущие операции. Иначе по истечении grace period Compose пришлёт SIGKILL и часть работы потеряется.

Документация: docker compose stop, docker compose down.