
При работе с большим числом сервисов через Docker часто требуется завершить их разом. Такая задача возникает при обновлении окружения, очистке ресурсов или диагностике некорректного поведения. Для этого существуют прямые команды Docker и набор гибких приёмов, позволяющих остановить процессы по ID, имени или набору условий.
При работе с docker-compose можно завершить все контейнеры проекта без ручного поиска их ID. В отдельных сценариях удобнее использовать вспомогательные скрипты, которые повторяют нужную последовательность команд и сокращают количество действий при рутинных операциях.
Остановка всех контейнеров через docker stop с перечислением ID
| ID | Имя | Статус |
|---|---|---|
| c1a8f09b12e3 | web_app | Up 3 hours |
| f92bd71a7c44 | worker_service | Up 25 minutes |
Для остановки всех запущенных контейнеров команда выглядит так: docker stop $(docker ps -q). Если часть процессов не завершилась из-за долгой обработки сигнала SIGTERM, стоит проверить тайм-аут или убедиться, что внутри контейнера не завис основной процесс.
Применение docker stop $(docker ps -q) для единичной команды

Конструкция docker stop $(docker ps -q) выполняет два действия: собирает список ID всех запущенных контейнеров и передаёт их одной командой на завершение. Подстановка в скобках обеспечивает автоматическое формирование набора параметров без промежуточных операций.
- docker ps -q – отображает только идентификаторы;
- docker ps – показывает имена, порты и состояние;
- docker inspect – даёт детали по отдельному экземпляру.
В ситуациях, где требуется остановить процессы в строгой последовательности, команда может быть дополнена фильтрами. Например, можно завершить только контейнеры с определённой меткой или с конкретным префиксом имени, а затем выполнить общую остановку оставшихся.
- Проверить список активных контейнеров через docker ps.
- Оценить, есть ли экземпляры, которые исключаются из остановки.
- Запустить команду docker stop $(docker ps -q) для завершения всех остальных.
Использование docker kill для принудительной остановки всех контейнеров

Команда docker kill завершает процессы внутри контейнеров немедленно, отправляя сигнал SIGKILL без ожидания корректного завершения. Такой способ применим, когда контейнеры не реагируют на SIGTERM или долго удерживают ресурсы.
Для остановки всех активных экземпляров можно использовать конструкцию docker kill $(docker ps -q). Она передаёт полный список ID, сформированный через подстановку, и исключает необходимость ручного выбора. Перед выполнением команды стоит убедиться, что среди запущенных контейнеров нет тех, где важны незавершённые операции.
Если требуется изменить тип отправляемого сигнала, можно указать его явно: docker kill —signal=SIGINT $(docker ps -q). Такой подход применяется при диагностике зависших процессов, когда сигналы мягкого завершения не дают результата.
Завершение контейнеров по фильтрам через docker ps —filter
Фильтры в команде docker ps позволяют сформировать точный набор контейнеров, которые требуется остановить. Это удобно при обслуживании окружений, где разные сервисы помечены метками, префиксами имен или специфическими состояниями. Команда docker ps —filter возвращает только те экземпляры, которые соответствуют заданному условию, после чего их можно передать в docker stop или docker kill.
Наиболее распространённые типы фильтров:
- label – выбор контейнеров по определённой метке, например: docker ps —filter «label=role=worker»;
- name – поиск по части имени: docker ps —filter «name=api»;
- status – выбор контейнеров только в состоянии running, exited или paused;
- ancestor – фильтрация по образу, от которого создан контейнер.
Для завершения всех найденных экземпляров можно объединить фильтрацию и остановку в одну строку: docker stop $(docker ps -q —filter «label=env=test»). Такой подход помогает отключить только нужные сервисы без риска затронуть остальные процессы.
Остановка контейнеров внутри docker-compose проекта
Команда docker compose stop завершает все контейнеры, определённые в текущем docker-compose.yml. При выполнении команды система использует имена сервисов и автоматически выбирает связанные экземпляры без необходимости указывать их вручную.
Если проект содержит несколько файлов конфигурации, можно уточнить их через параметр -f. Это помогает остановить только те сервисы, которые входят в нужный набор конфигураций. Пример: docker compose -f docker-compose.yml -f docker-compose.override.yml stop.
При необходимости завершить контейнеры с последующим удалением остановленных экземпляров используется команда docker compose down. В этом случае дополнительно удаляются сети, созданные проектом, если они не используются другими контейнерами.
Когда проект включает несколько экземпляров одного сервиса, например web-1, web-2, web-3, команда docker compose stop корректно завершает их все на основе имени сервиса. Это снижает риск пропустить отдельный контейнер при переходе между версиями окружения.
Прерывание зависших контейнеров с помощью сигнала SIGKILL
Сигнал SIGKILL принудительно завершает процесс внутри контейнера без ожидания корректного завершения. Его применение необходимо, когда контейнеры не реагируют на docker stop или другие сигналы, удерживая ресурсы и блокируя работу сервисов.
Основные рекомендации при использовании SIGKILL:
- Применять только к контейнерам, которые действительно зависли;
- Проверять ID зависших контейнеров через docker ps;
- Оценивать состояние процессов внутри контейнера с docker top перед принудительным завершением.
Пример команды для массового завершения зависших контейнеров:
- Получить список запущенных контейнеров: docker ps -q;
- Применить принудительное завершение: docker kill -s SIGKILL $(docker ps -q);
- Проверить состояние контейнеров после завершения: docker ps -a.
Для автоматизации процессов можно объединить команды в скрипт, который проверяет статус контейнеров и применяет SIGKILL только к тем экземплярам, которые не реагируют на стандартные сигналы.
Остановка контейнеров по имени или части имени с использованием grep

Фильтрация контейнеров по имени позволяет завершить только нужные экземпляры, когда среди запущенных процессов присутствуют несколько сервисов. Для этого используется комбинация docker ps и grep, которая извлекает идентификаторы контейнеров по совпадению с заданной строкой.
Пример последовательности действий:
- Вывести список всех запущенных контейнеров с их ID и именами: docker ps;
- Отфильтровать контейнеры по части имени: docker ps | grep api;
- Извлечь только ID контейнеров для передачи в команду остановки: docker ps | grep api | awk ‘{print $1}’;
- Применить команду остановки: docker stop $(docker ps | grep api | awk ‘{print $1}’).
Такой подход полезен, когда контейнеры именуются по шаблону, например web-1, web-2, web-3, и требуется завершить только определённую группу, не затрагивая остальные сервисы.
Автоматизация остановки всех контейнеров в скрипте Bash

Скрипт Bash позволяет объединить последовательность команд Docker в единый процесс, который можно запускать без ручного ввода. Такой подход ускоряет обслуживание окружения и снижает риск пропустить контейнеры.
Пример простого скрипта для остановки всех запущенных контейнеров:
#!/bin/bash
CONTAINERS=$(docker ps -q)
if [ -n «$CONTAINERS» ]; then
docker stop $CONTAINERS
else
echo «Запущенных контейнеров нет.»
fi
Рекомендации при автоматизации:
- Добавлять проверку на наличие контейнеров перед остановкой;
- Использовать фильтры docker ps —filter внутри скрипта для точного выбора сервисов;
- Логировать результаты команд для последующего анализа;
- При необходимости включать сигналы SIGKILL для зависших контейнеров через docker kill внутри условных блоков.
Такой скрипт можно запускать вручную или интегрировать в планировщик задач, что позволяет регулярно очищать окружение и поддерживать ресурсы хоста в стабильном состоянии.
Вопрос-ответ:
Какая команда завершает все запущенные контейнеры Docker сразу?
Для завершения всех контейнеров используется команда docker stop $(docker ps -q). Конструкция $(docker ps -q) получает список ID всех активных контейнеров, и docker stop передаёт им сигнал SIGTERM для корректного завершения процессов. После выполнения можно проверить состояние контейнеров через docker ps -a.
Когда стоит применять docker kill вместо docker stop?
Команду docker kill используют для принудительного завершения контейнеров, которые не реагируют на docker stop. Она отправляет сигнал SIGKILL, прерывая процессы немедленно. Это помогает освободить ресурсы, когда контейнер завис или основной процесс внутри него не завершает работу.
Можно ли остановить только определённые контейнеры, а не все сразу?
Да, для этого применяются фильтры docker ps —filter или поиск по имени через grep. Например, команда docker stop $(docker ps —filter «label=env=test» -q) завершит только контейнеры с меткой env=test. С помощью docker ps | grep имя | awk ‘{print $1}’ можно остановить контейнеры с конкретной частью имени.
Как завершить контейнеры, запущенные через docker-compose?
Для проектов с docker-compose применяется команда docker compose stop, которая останавливает все контейнеры текущего проекта. Если требуется удалить контейнеры вместе с сетями, создаваемыми проектом, используется docker compose down. Для нескольких конфигурационных файлов указывают их через параметр -f.
Как автоматизировать остановку контейнеров через скрипт Bash?
Можно создать скрипт, который проверяет запущенные контейнеры, получает их ID через docker ps -q и передаёт в docker stop. В скрипт удобно добавить фильтры, чтобы выбирать только нужные сервисы, логирование результатов и условное применение SIGKILL для зависших контейнеров. Это позволяет регулярно останавливать контейнеры без ручного ввода.
