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


Answers

Другой метод, который я получил от Гийома Дж. Чармеса (кредит, когда он должен):

docker rm `docker ps --no-trunc -aq`

удалит все контейнеры элегантным способом.

И Bartosz Bilicki, для Windows:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

Для PowerShell:

docker rm @(docker ps -aq)

Обновление с Docker 1.13 (Q4 2016), кредит для VonC ( позже в этом потоке ):

docker system prune удалит ВСЕ неиспользуемые данные (т. е. в порядке: контейнеры остановлены, тома без контейнеров и изображений без контейнеров).

См. PR 26108 и commit 86de7c0 , в которых представлены несколько новых команд, которые помогают облегчить визуализацию того, сколько места данные демона Docker берут на диск и позволяя легко очищать «ненужный» избыток.

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y
Question

Этот вопрос связан с тем, должен ли я беспокоиться о избыточных, неработающих, контейнерах Docker? ,

Мне интересно, как удалить старые контейнеры. docker rm 3e552code34a позволяет удалить один, но у меня уже есть много. docker rm --help не дает выбор (например, все или по имени изображения).

Возможно, есть каталог, в котором хранятся эти контейнеры, где я могу их легко удалить вручную?




Обновление. Начиная с версии Docker версии 1.13 (выпущенной в январе 2017 г.) вы можете выполнить следующую команду для очистки остановленных контейнеров, неиспользуемых томов, оборванных изображений и неиспользуемых сетей:

docker system prune

Если вы хотите убедиться, что вы удаляете только те контейнеры, у которых есть статус exited , используйте это:

docker ps -aq -f status=exited | xargs docker rm

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

docker images -q --no-trunc -f dangling=true | xargs docker rmi



На Ubuntu 14.04 (Trusty Tahr):

$ for CON in `docker ps -qa`; do docker rm $CON ; done

Это обычная команда Bash, поэтому она должна работать с КАЖДОЙ Bash-совместимым терминалом.




Удалите 5 самых старых контейнеров:

docker rm `docker ps -aq | tail -n 5`

Посмотрите, сколько осталось контейнеров:

docker ps -aq | wc -l



Чтобы удалить ВСЕ контейнеры без плача:

sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty sudo docker rm -f



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

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

docker rm $(docker stop -t=1 $(docker ps -q))

Вместо stop вы можете использовать kill . В моем случае я предпочитаю stop так как я, как правило, повторно запускаю их против создания нового каждый раз, поэтому я стараюсь закрыть их красиво.

Примечание. При попытке остановить контейнер вы получите сообщение об ошибке:

Ошибка: Невозможно удалить запущенный контейнер, сначала остановите его.

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

docker rm $(docker ps -a -q)



Поэтому лично я рекомендую сделать это как часть вашего сценария развертывания для изображений и контейнеров, содержащих только самые последние n контейнеров и изображений. Я помещаю свои изображения докеров с той же схемой версий, которую я использую с git tag а также всегда помечать последнее изображение докеров с помощью «последней». Это означает, что, не очищая ничего, мои изображения докеров выглядят так:

REPOSITORY                       TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
some_repo/some_image             0.0.5              8f1a7c7ba93c        23 hours ago        925.4 MB
some_repo/some_image             latest             8f1a7c7ba93c        23 hours ago        925.4 MB
some_repo/some_image             0.0.4              0beabfa514ea        45 hours ago        925.4 MB
some_repo/some_image             0.0.3              54302cd10bf2        6 days ago          978.5 MB
some_repo/some_image             0.0.2              0078b30f3d9a        7 days ago          978.5 MB
some_repo/some_image             0.0.1              sdfgdf0f3d9a        8 days ago          938.5 MB

Теперь, конечно, я не хочу, чтобы все мои изображения (или контейнеры) возвращались на вечность во всех моих производственных коробках. Я просто хочу последние 3 или 4 для откатов и избавиться от всего остального. tail Unix - ваш лучший друг здесь. Поскольку docker images и docker ps порядку по дате, мы можем просто использовать tail чтобы выбрать все, кроме верхней 3, и удалить их:

docker rmi $(docker images -q | tail -n +4)

Запустите это вместе с вашими сценариями развертывания (или локально), чтобы всегда иметь достаточно изображений, чтобы удобно откидываться назад, не занимая слишком много места или загромождая вещи старыми изображениями.

Лично я оставляю в контейнере только один контейнер в любое время, но вы можете делать то же самое с контейнерами, если хотите:

docker rm $(docker ps -aq | tail -n +4)

Наконец, в моем упрощенном примере мы имеем дело только с одним репо за раз, но если бы у вас было больше, вы можете просто немного усложниться с той же идеей. Скажем, я просто хочу сохранить последние 3 изображения из some_repo / some_image. Я могу просто смешать в grep и awk и быть в пути:

docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)

Опять же, та же идея относится и к контейнерам, но вы получаете это к этому моменту, поэтому я прекращу приводить примеры.




Официальный способ :

docker rm `docker ps -aq`

Сторонники Docker указали, что для этого не будет никакой команды, и вы создадите такие команды:

Мы обсудили это раньше и предпочли пользователям использовать приведенную выше строку, не добавляя дополнительный код в Docker.




С Docker 1.13 (Q4 2016) у вас теперь есть:

docker system prune удалит ВСЕ неиспользуемые данные (т. е. в порядке: контейнеры остановлены, тома без контейнеров и изображений без контейнеров).

См. PR 26108 и commit 86de7c0 , в которых представлены несколько новых команд, которые помогают облегчить визуализацию того, сколько места данные демона Docker берут на диск и позволяя легко очищать «ненужный» избыток.

docker system prune 

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

Как отмечает wjv ,

Существует также docker {container,image,volume,network} prune , который может использоваться для удаления неиспользуемых экземпляров только одного типа объектов.

Введен в commit 913e5cb , только для Docker 1.13+.

docker container prune



Вы можете удалить только остановленные контейнеры. Остановить все в начале

docker stop $(docker ps -a -q)

Затем вы можете удалить

docker rm $(docker ps -a -q)




Я всегда использую docker rmi $(docker ps -a -q) для удаления всех изображений.

Вы можете удалить каталог /var/lib/docker/graph если docker rmi не удалось.




docker rm --force `docker ps -qa`



Удалите все остановленные контейнеры:

docker rm $(docker ps -a | grep Exited | awk '{print $1}')

Из комментария pauk960 :

Начиная с версии 1.3.0 вы можете использовать фильтры с docker ps , а не grep Exited use docker ps -a -f status=exited . И если вы используете -q с ним, вы можете получить идентификаторы контейнера, а не полный вывод, не нужно использовать awk для этого.







https://github.com/HardySimpson/docker-cleanup

Очистка докеров

Крошечная оболочка «все-в-одном», которая удаляет:

  • Контейнеры, которые не работают более одного дня назад
  • Изображения, которые не принадлежат ни одному из оставшихся контейнеров

Предназначен для работы в качестве работы crontab

Особенность

  • Он удалит все <none>:<none> изображения
  • Если изображение имеет несколько ссылок на репо: теги к нему, оно удалит все теги repo:, за исключением запуска контейнера. На самом деле это характер «докера rmi».
  • Многие сообщения об ошибках будут отображаться на экране, и вы можете выбрать 2>/dev/null или не
  • Изучите что-нибудь из docker-gc и исправьте его проблему (он не может удалить изображение с mutliple repo: tag)



Related



Tags

docker docker