Команда docker compose down

Справочник команд Docker


docker compose downИспользуется для остановки и удаления всех контейнеров, сетей и связанных ресурсов, запущенных с помощьюdocker compose up.

При выполненииdocker compose upпосле запуска набора сервисов Docker автоматически создаёт контейнеры, сети и даже анонимные тома данных.

Если использовать толькоdocker compose stop, контейнеры лишь приостанавливаются, но всё ещё занимают дисковое пространство и сохраняют конфигурацию сети; при следующем запуске старое состояние может вызвать конфликты.

docker compose downЗатем следует полная очистка в один клик: остановка контейнеров, удаление контейнеров, удаление сетей и восстановление среды до чистого состояния.

Следующая блок-схема показывает полную цепочку выполнения команды down:

Start node docker compose down Step 1: SIGTERM ① Send SIGTERM signal Send a stop signal to each container and wait for graceful exit Step 2: Timeout check Timeout? Default 10sBranch: Timeout Yes SIGKILL force killBranch: Normal exit No (normal exit)Step 3: Delete containers ② Delete all containers Remove all container instances defined in the Compose project Step 4: Delete networks ③ Delete project network Remove networks defined in docker-compose.yml (default networks + custom networks) Step 5: Optional operations ④ Optional: Delete data volumes (-v) / Delete images (--rmi) Only executed when the corresponding option is specified; retained by default End Project environment cleaned ✓

Если вы не уверены, чистая ли текущая среда, сначала используйтеdocker compose psПроверьте запущенные контейнеры, затем решите, стоит ли запускать down.


Быстрый старт

Простейшее использование: в каталоге, содержащемdocker-compose.ymlвыполните в каталоге, где находится файл:

# 进入 Compose 项目目录
cd ~/myproject

# 一键停止并清理所有资源
docker compose down

После выполнения терминал обычно выводит что-то вроде следующего:

[+] Running 3/3
 Container myproject-web-1     Removed    1.2s
 Container myproject-db-1      Removed    0.8s
 Network myproject_default     Removed    0.3s

На этом этапе:

  • Все контейнеры, запущенные Compose, были остановлены и удалены.
  • Специфичная для проекта сеть была удалена.
  • Тома данныхСохраняются по умолчанию(чтобы предотвратить случайное удаление данных)

Краткий справочник по опциям команды

Ниже представленdocker compose downполный список поддерживаемых опций:

ПараметрыСокращениеОписаниеЗначение по умолчанию
--volumes-vУдалить именованные тома данных, определённые в файле Compose, а также анонимные тома данных, монтируемые контейнерами.Не удалять
--remove-orphansОтсутствуетУдалить осиротевшие контейнеры, соответствующие сервисам, которых больше нет в файле Compose.Не удалять
--rmi <type>ОтсутствуетУдалить образы, используемые сервисами; тип необязателен.all(Все) илиlocal(только собранные локально)Не удалять
--timeout-tТайм-аут (в секундах) для остановки контейнеров; по истечении тайм-аута принудительно завершить.10
--dry-runОтсутствуетТолько выводить операции, которые будут выполнены, без их фактического выполнения (v2.21+).Не включать

Особенности поведения по умолчанию, требующие наибольшего внимания:Тома данных не удаляются по умолчаниюЭто означает, что даже если вы выполните down, данные в базе данных останутся в томе данных и будут восстановлены при следующем запуске up. Это механизм защиты, но если вы действительно хотите полностью очистить всё, не забудьте добавить-v。


Подробное использование

Базовое использование: остановка и очистка

Запустите прямо в каталоге проекта без каких-либо параметров:

# 停止并删除容器和网络,保留数据卷
docker compose down

Это эквивалентно последовательному выполнению:

docker compose stop       # 停止所有容器
docker compose rm -f      # 强制删除所有容器
docker network rm &lt;网络名&gt;  # 删除项目网络

Также удалите тома данных: -v / --volumes

Когда нужно полностью очистить окружение — включая постоянные данные, такие как данные базы данных и кэши — добавьте-v:

# 删除容器、网络以及 Compose 文件中定义的所有具名数据卷
docker compose down -v

Ниже приведён полный пример сравнения, помогающий понять-vВлияние:

Пример

# содержимое файла docker-compose.yml
services
:
  web
:
    image
: nginx
    ports
:
     - "8080:80"
  db
:
    image
: mysql:8.0
    environment
:
      MYSQL_ROOT_PASSWORD
: example123
    volumes
:
     - db_data:/var/lib/mysql    # именованные тома

volumes
:
  db_data
:                        # определить именованные тома
# 不带 -v:db_data 数据卷保留,数据库中的数据不丢失
$ docker compose down
[+] Running 3/3
 Container test-web-1  Removed
 Container test-db-1   Removed
 Network test_default   Removed

# 带 -v:db_data 数据卷被删除,数据库数据永久丢失
$ docker compose down -v
[+] Running 4/4
 Container test-web-1   Removed
 Container test-db-1    Removed
 Volume test_db_data    Removed
 Network test_default   Removed

Выполнение в производственной средеdown -vПрежде чем [делать это], хорошенько подумайте — после удаления тома данных данные невозможно восстановить. Рекомендуется сначала создать резервную копию данных или использовать это только в непроизводственных средах.-v。

Очистка осиротевших контейнеров: --remove-orphans

Когда вы удаляете определение сервиса из файла docker-compose.yml, но контейнер этого сервиса всё ещё остаётся, такие контейнеры называются "осиротевшими контейнерами".

Пример

# docker-compose.yml
services:
  app:
    image: nginx
    networks:
- shared_network # ссылка на внешнюю сеть

networks:
  shared_network:
external: true # внешняя сеть, down не удалит её

volumes:
  shared_data:
external: true # внешний том, down -v тоже его не удалит

Это разумно: внешние ресурсы могут совместно использоваться несколькими проектами Compose и не должны очищаться одним проектом.

Порядок запуска зависимостей контейнеров

down останавливает контейнеры в обратном порядке, то есть сначала останавливает зависимую сторону, затем сторону, от которой она зависит, противоположно порядку запуска при up, что обеспечивает корректное освобождение зависимостей.

Совместимость с docker-compose (устаревшая версия)

Если вы используете старую версиюdocker-compose(с дефисом), формат команды:

$ docker-compose down -v

Новый Docker Compose v2 интегрирует функциональность Compose в Docker CLI, и команда становитсяdocker compose(разделённая пробелом.) Параметры у обоих абсолютно одинаковы, но рекомендуется последовательно использовать новый формат.


ЧАВО

В: После выполнения down контейнеры всё ещё работают?

Возможная причина: эти контейнеры не были созданы текущим файлом Compose, а были запущены черезdocker runили запущены другими файлами Compose.

используйтеdocker psдля просмотра сведений о контейнере, чтобы убедиться, совпадает ли префикс имени контейнера с именем проекта Compose.

В: Дисковое пространство не освобождается после down -v?

Проверьте, не занимают ли неиспользуемые образы место:

$ docker image ls        # 查看镜像列表
$ docker image prune -a  # 清理未使用的镜像

Docker не очищает образы автоматически; нужно вручную выполнитьdocker image pruneили использоватьdown --rmi allОчистить всё вместе.

Вопрос: Как безопасно выполнить down в скрипте?

Пример

#!/bin/bash
# Скрипт безопасной очистки: сначала убедитесь, что проект запущен, затем выполните down

PROJECT_DIR="/opt/example-app"

if [ -f "$PROJECT_DIR/docker-compose.yml" ]; then
    cd "$PROJECT_DIR"
    # Сначала используйте ps, чтобы проверить, есть ли запущенные сервисы
    if docker compose ps --status running | grep -q .; затем
        echo "Останавливаем проект EXAMPLE..."
        docker compose down --remove-orphans
        echo "Очистка завершена"
    else
        echo "Проект не запущен, пропускаем операцию down"
    fi
else
    echo "Ошибка: не удается найти файл docker-compose.yml"
    exit 1
fi

Этот скрипт выполняет базовые проверки путей и оценку состояния перед очисткой, чтобы избежать случайных операций.


Справочник команд Docker

Другие расширения