Глиф Учебники

Как удалить все остановленные контейнеры

Справочник · Docker · 1 минута чтения

Bash
docker ps -a --filter status=exited
docker container prune

Первая команда показывает остановленные контейнеры — посмотрите, нет ли среди них нужных. Вторая удаляет все остановленные контейнеры: она выведет предупреждение WARNING! This will remove all stopped containers. и спросит подтверждение — ответьте y. В конце — сколько места освободилось.

Вместе с контейнером удаляется всё, что программа записала внутри него, кроме томов и подключённых папок. Если сервис просто остановлен на время (например, база, которую запустят завтра), prune удалит и его. Тома при этом не удаляются.

Только старые

Удалить остановленные контейнеры старше суток, а свежие оставить:

Bash
docker container prune --filter "until=24h"

Без вопросов — для скриптов

Bash
docker container prune -f

-f убирает вопрос о подтверждении. Используйте его только в скриптах, где точно известно, что на сервере нет контейнеров, остановленных намеренно.

Через docker rm

Тот же результат, но с выбором, какие контейнеры удалять:

Bash
docker rm $(docker ps -aq --filter status=exited)

docker ps -aq выводит только идентификаторы (-q) всех контейнеров (-a), фильтр оставляет остановленные, и docker rm удаляет их по списку. Если остановленных нет, docker rm пожалуется, что ему не дали ни одного контейнера, — это не страшно.

Удалить контейнеры одного образа:

Bash
docker rm $(docker ps -aq --filter status=exited --filter ancestor=hello-world)

Удалить вообще все контейнеры

Команда ниже останавливает и удаляет все контейнеры на компьютере, в том числе работающие сервисы. Данные в их слоях пропадут, сайты и базы перестанут работать. На сервере с рабочими сервисами её не выполняйте.

Bash
docker rm -f $(docker ps -aq)

Чтобы не копились