Дополнительно
Как удалить старые контейнеры Docker
Этот вопрос связан с https://stackoverflow.com/questions/17014263/should-i-be-concerned-about-excess-non-running-docker-containers.
Мне интересно, как удалить старые контейнеры. Docker rm 3e552code34a
позволяет удалить один, но у меня уже есть много. docker rm --help
не дает опцию выбора (как все, или по имени изображения).
Возможно, есть каталог, в котором хранятся эти контейнеры, где я могу легко удалить их вручную?
1159
50
Поскольку Docker 1.13.x вы можете использовать Docker контейнерный чернослив:
Это удалит все остановленные контейнеры и должно работать на всех платформах одинаково.
Существует также Docker system prune:
который очистит все неиспользуемые контейнеры, сети, изображения (как висящие, так и не имеющие ссылок) и, при необходимости, тома в одной команде.
Для более старых версий Docker вы можете связать команды Docker вместе с другими командами Unix, чтобы получить то, что вам нужно. Вот пример того, как очистить старые контейнеры, которым уже несколько недель:
Чтобы отдать должное, где это необходимо, этот пример взят из https://twitter.com/jpetazzo/status/347431091415703552.
Другой метод, который я получил от Гийома Ж. Шармеса (кредит, где он должен):
удалит все контейнеры элегантно.
И Бартош Билицкий, для Windows:
Для PowerShell:
Обновление с Docker 1.13 (Q4 2016), кредит VonC (позже в этой теме):
docker system prune
удалит ВСЕ неиспользованные данные (т.е., по порядку: контейнеры остановлены, объемы без контейнеров и изображения без контейнеров).См. PR 26108 и commit 86de7c0, которые вводят несколько новых команд, чтобы облегчить визуализацию того, сколько места занимают данные демона Docker на диске, и позволяют легко очистить «необходимый» избыток.
Обновленный ответ Используйте
docker system prune
илиdocker container prune
прямо сейчас. См. Обновленный ответ VonC.Предыдущий ответ Составляя несколько различных советов выше, самый элегантный способ удалить все неработающие контейнеры, кажется:
docker rm $ (docker ps -q -f status = exited)
-q
печатает только идентификаторы контейнера (без заголовков столбцов)-f
позволяет фильтровать ваш список печатных контейнеров (в этом случае мы фильтруем только отображение выведенных контейнеров)Официальный путь это:
Сопровождающие Docker указали, что для этого не будет команды - и вы составляете команды следующим образом:
С Docker 1.13 (Q4 2016) у вас теперь есть:
prune системы докеров -a
удалит ВСЕ неиспользованные данные (т.е., по порядку: контейнеры остановлены, объемы без контейнеров и изображения без контейнеров).docker system prune
без -a удалит (для изображений) только висящие изображения или изображения без тега, как [комментировано][2] smilebomb.См. PR 26108 и commit 86de7c0, которые вводят несколько новых команд, чтобы облегчить визуализацию того, сколько места занимают данные демона Docker на диске, и позволяют легко очистить «необходимый» избыток.
Как wjv комментариев
Введен в commit 913e5cb, только для Docker 1.13+.
[2]: https://stackoverflow.com/questions/17236796/how-to-remove-old-docker-containers/39860665?noredirect = 1 # comment89860875_39860665
Теперь можно использовать фильтр с
docker ps
:И для изображений:
Однако любой из них приведет к тому, что
docker rm
илиdocker rmi
выдадут ошибку, когда нет соответствующих контейнеров. Старый трюкdocker rm $ (docker ps -aq)
был еще хуже, когда он пытался удалить любой работающий контейнер, не справляясь с каждым.Вот более чистый скрипт для добавления в ваш
~/.bashrc
или~/.profile
:ps
.*ОБНОВЛЕНО 2019 (НОВЫЙ)
Это - 2017 (ЛОД) путь
Удалить ВСЕ ОСТАНОВЛЕННЫЕ КОНТЕЙНЕРЫ
Удалить ВСЕ КОНТЕЙНЕРЫ (ОСТАНОВЛЕНО И НЕ ОСТАНОВЛЕНО)
Удалить все остановленные контейнеры:
Из комментария pauk960:
Если вы не хотите удалять все контейнеры, вы можете выбрать все контейнеры, созданные до или после определенного контейнера с
docker ps - до < container-ID >
или сdocker ps --since < container-ID >
. Эта функция, по крайней мере, в версии Docker 0.6.5.Допустим, вы разработали свою систему, и теперь она работает, но осталось несколько контейнеров. Вы хотите удалить контейнеры, созданные до этой рабочей версии. Определите идентификатор рабочего контейнера с помощью
docker ps
.Удалите контейнеры, созданные перед другим контейнером
Еще один пример. Ваша база данных уже работает на контейнере Docker. Вы разработали свое приложение для работы на другом контейнере, и теперь у вас есть несколько ненужных контейнеров.
Удалите контейнеры, созданные после определенного контейнера
Docker хранит контейнеры в
/ var / lib / docker / containers
в Ubuntu. Я думаю, что дополнительные контейнеры не причиняют другого вреда, но занимают место на диске.Обновление: Начиная с версии Docker 1.13 (выпущенной в январе 2017 года), вы можете выполнить следующую команду для очистки остановленных контейнеров, неиспользованных объемов, висящих изображений и неиспользуемых сетей:
Если вы хотите убедиться, что вы удаляете только те контейнеры, которые имеют статус «вышел», используйте это:
Точно так же, если вы убираете вещи докера, вы можете избавиться от неровных, неназванных изображений таким образом:
Вот мой сценарий
docker-cleanup
, который удаляет нецелевые контейнеры и изображения. Пожалуйста, проверьте источник для любых обновлений.Источник: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup
Сначала прекратите работу контейнеров, прежде чем пытаться их удалить
Удалить работающие контейнеры
Вы можете использовать
kill
вместоstop
. В моем случае я предпочитаю «стоп», так как я склонен перезапускать их против. каждый раз создаю новый, поэтому я стараюсь их красиво закрыть.Примечание: Попытка остановить контейнер приведет к ошибке:
Удалить все контейнеры
Удаление всех контейнеров из оболочки Windows:
https://github.com/HardySimpson/docker-cleanup
Очистка докеров
Крошечная универсальная оболочка, которая удаляет:
Намереваться работать как работа
Характеристика
< none >: < none >
2 > / dev / null
или нетИспользовать:
Он принудительно останавливает и удаляет все контейнеры, присутствующие на месте.
Снять все остановленные контейнеры.
Это удалит все остановленные контейнеры, получив список всех контейнеров с docker ps -a -q и передав их идентификаторы в docker rm. Это не должно удалять бегущие контейнеры, и это скажет вам, что не может удалить бегущее изображение.
Удалить все нецелевые изображения
Теперь вы хотите очистить старые изображения, чтобы сэкономить место.
Поэтому лично я рекомендую сделать это как часть вашего сценария развертывания для изображений и контейнеров, сохраняя только самые последние n контейнеров и изображений. Я помечаю свои изображения Docker той же схемой версии, которую я использую с
git tag
, а также всегда помечаю последнее изображение Docker как «последнее.«Это означает, что, ничего не убирая, мои изображения Docker выглядят так:Теперь, конечно, я не хочу, чтобы все мои изображения (или контейнеры) возвращались навсегда на все мои производственные коробки. Я просто хочу последние 3 или 4 для откатов и избавиться от всего остального. Unix
tail
ваш лучший друг здесь. Посколькуdocker images
иdocker ps
оба упорядочены по дате, мы можем просто использоватьtail
, чтобы выбрать все, кроме верхних трех, и удалить их:Запустите его вместе со своими сценариями развертывания (или локально), чтобы всегда сохранять достаточное количество изображений, чтобы удобно откатываться назад, не занимая слишком много места и не загромождая старые изображения.
Лично я держу только один контейнер в своей производственной коробке в любое время, но вы можете делать то же самое с контейнерами, если хотите больше:
Наконец, в моем упрощенном примере мы имеем дело только с одним хранилищем за раз, но если у вас было больше, вы можете просто стать немного более изощренным с той же идеей. Скажем, я просто хочу сохранить последние три изображения из some_repo / some_image. Я могу просто смешаться в
grep
иawk
и быть в пути:Опять же, та же идея применима к контейнерам, но вы получите ее к этому моменту, поэтому я перестану приводить примеры.
Удалить все процессы докера:
Удалить конкретный контейнер:
Удалить 5 самых старых контейнеров:
Посмотрите, сколько осталось контейнеров
Новый путь: spotify / docker-gc подшучивают.
Поддерживается обстановка окружающей среды
Принуждение удаления изображений с несколькими тегами
Принуждение удаления контейнеров
За исключением недавно выведенных контейнеров и изображений из коллекции мусора
Этот параметр также предотвращает удаление изображений, созданных менее чем GRACE_PERIOD_SECONDS несколько секунд назад.
Сухой бег
Очистка осиротевших контейнеров CLEAN_UP_VOLUMES = 1
Ссылка: docker-gc
Старый способ сделать:
удалить старые, неработающие контейнеры
удалить все изображения, связанные с неработающими контейнерами-докерами
очистка осиротевших докеров для докеров версии 1.10.x и выше
На основании периода времени