Этот вопрос связан с тем, должен ли я беспокоиться о лишних, не работающих Docker-контейнерах? ,
Мне интересно, как удалить старые контейнеры. docker rm 3e552code34a
Позволяет удалить одну, но у меня есть много уже. docker rm --help
не дает возможность выбора (как все, или по имени изображения).
Может быть, есть каталог, в котором хранятся эти контейнеры, где я могу легко удалить их вручную?
docker run
с--rm
флагом, который сделает контейнер эфемерным, удалив все файлы контейнера после запуска.docker system prune
команду. Смотрите мой ответ ниже .Portainer
Мы можем управлятьall the old containers, non using volumes and images
с помощью этого инструмента. Это простой интерфейс управления докерамиPlease refer my update below on how to deploy the application
Ответы:
Начиная с Docker 1.13.x, вы можете использовать Docker контейнера Prune :
Это удалит все остановленные контейнеры и должно работать на всех платформах одинаково.
Существует также черновая система Docker :
которая очистит все неиспользуемые контейнеры, сети, образы (как свисающие, так и не связанные) и, при необходимости, тома, одной командой.
Для более старых версий Docker вы можете связать команды Docker с другими командами Unix, чтобы получить то, что вам нужно. Вот пример того, как очистить старые контейнеры, которые являются неделями:
Чтобы дать кредит, где это происходит, этот пример от https://twitter.com/jpetazzo/status/347431091415703552 .
источник
docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
-rm
опцию удаления промежуточных контейнеров после успешной сборки.docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
docker rmi $(docker images -q -f dangling=true)
Другой метод, который я получил от Гийома Ж. Шармса (кредит, где он должен):
удалит все контейнеры элегантным способом.
И Бартош Билицки, для Windows:
Для PowerShell:
Обновление с Docker 1.13 (4 квартал 2016 г.), кредит VonC ( далее в этой теме ):
docker system prune
удалит ВСЕ неиспользуемые данные (т.е. по порядку: контейнеры остановлены, тома без контейнеров и изображения без контейнеров).См. PR 26108 и commit 86de7c0 , в которых представлены несколько новых команд, которые помогут упростить визуализацию того, сколько места занимают данные демона Docker на диске и позволяют легко очистить «ненужный» избыток.
источник
docker ps -a -q | xargs docker rm
работает (может понадобиться sudo)docker rm $(docker ps -a -q)
?--no-trunc
такdocker rm
как в любом случае не нужны полные идентификаторы.Обновленный ответ Используйте
docker system prune
илиdocker container prune
сейчас. Смотрите обновленный ответ VonC .Предыдущий ответ Составив несколько разных советов, приведенных выше, наиболее элегантный способ удаления всех неработающих контейнеров выглядит так:
docker rm $(docker ps -q -f status=exited)
-q
печатает только идентификаторы контейнера (без заголовков столбцов)-f
позволяет фильтровать список распечатанных контейнеров (в этом случае мы фильтруем только отображаемые контейнеры)источник
-v
чтобы избежать оборванных томов:docker rm -v $(docker ps -q -f status=exited)
. См. Docs.docker.com/userguide/dockervolumes/… для подробностей о висячих томах.alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
Официальный способ :
Сопровождающие Docker указали, что для этого не будет никаких команд - и вы составляете такие команды:
источник
docker volume
подкоманды и именованных томов.С Docker 1.13 (4 квартал 2016 года) у вас теперь есть:
docker system prune -a
удалит ВСЕ неиспользуемые данные (т.е. по порядку: контейнеры остановлены, тома без контейнеров и изображения без контейнеров).docker system prune
без -a удалит (для изображений) только оборванных изображения или изображения без тега, так как заметил по smilebomb .См. PR 26108 и commit 86de7c0 , в которых представлены несколько новых команд, которые помогут упростить визуализацию того, сколько места занимают данные демона Docker на диске и позволяют легко очистить «ненужный» избыток.
Как комментарии WJV ,
Представлено в коммите 913e5cb , только для Docker 1.13+.
источник
-f
флаг, чтобы принудительно выполнить очистку без вопросов.docker system prune -a
удаления неиспользуемых изображений.docker system prune
удаляет только висячие изображения или изображения без тега.Теперь можно использовать фильтрацию с
docker ps
:И для изображений :
Тем не менее, любой из них будет вызывать
docker rm
илиdocker rmi
выдавать ошибку, когда нет соответствующих контейнеров. Более старыйdocker rm $(docker ps -aq)
трюк был еще хуже, поскольку он пытался удалить любой работающий контейнер, но на каждом из них ничего не получалось.Вот более чистый скрипт для добавления в ваш
~/.bashrc
или~/.profile
:Изменить: как отмечено ниже, оригинальный ответ был для удаления изображений, а не контейнеров. Обновлено, чтобы ответить на оба, в том числе новые ссылки на документацию. Спасибо Адриану (и ответу Райана) за упоминание новой
ps
фильтрации.источник
storage
конатинеров.status=created
чтобы получить те, которые не работают и никогда не запускались.ОБНОВЛЕНО 2019 (НОВИНКА)
Это - 2017 (старый) способ
Удалить ВСЕ ОСТАНОВЛЕННЫЕ КОНТЕЙНЕРЫ
Чтобы удалить ВСЕ КОНТЕЙНЕРЫ (ОСТАНОВЛЕННЫЕ И НЕ ОСТАНОВЛЕННЫЕ)
источник
docker volume/container/image prune
, см. stackoverflow.com/a/39860665/3625317Удалить все остановленные контейнеры:
Из комментария pauk960 :
источник
Если вы не хотите удалять все контейнеры, вы можете выбрать все контейнеры, созданные до или после определенного контейнера с
docker ps --before <container-ID>
или сdocker ps --since <container-ID>
. Эта функция по крайней мере в версии Docker 0.6.5.Допустим, вы разработали свою систему, и теперь она работает, но осталось несколько контейнеров. Вы хотите удалить контейнеры, созданные до этой рабочей версии. Определите идентификатор рабочего контейнера с помощью
docker ps
.Удалить контейнеры, созданные до другого контейнера
Другой пример. Ваша база данных уже запущена в контейнере Docker. Вы разработали свое приложение для запуска в другом контейнере, и теперь у вас есть ряд ненужных контейнеров.
Удалить контейнеры, созданные после определенного контейнера
Docker хранит контейнеры
/var/lib/docker/containers
в Ubuntu. Я думаю, что дополнительные контейнеры не наносят никакого другого вреда, но занимают место на диске.источник
Обновление. Начиная с версии Docker 1.13 (выпущенной в январе 2017 г.), вы можете выполнить следующую команду для очистки остановленных контейнеров, неиспользуемых томов, висячих образов и неиспользуемых сетей:
Если вы хотите убедиться, что вы удаляете только контейнеры, которые имеют
exited
статус, используйте это:Точно так же, если вы чистите докер, вы можете избавиться от немаркированных, неназванных изображений следующим образом:
источник
Вот мой
docker-cleanup
скрипт, который удаляет нетегированные контейнеры и изображения. Пожалуйста, проверьте источник любых обновлений.Источник: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup
источник
xargs --no-run-if-empty
опцииВо-первых, прекратите запуск контейнеров, прежде чем пытаться их удалить
Удалить работающие контейнеры
Вы могли бы использовать
kill
вместоstop
. В моем случае я предпочитаю,stop
так как я склонен перезапускать их, а не создавать новые каждый раз, поэтому я стараюсь их отключить.Примечание. Попытка остановить контейнер приведет к ошибке:
Удалить все контейнеры
источник
Удаление всех контейнеров из оболочки Windows:
источник
https://github.com/HardySimpson/docker-cleanup
Очистка докера
Крошечная универсальная оболочка, которая удаляет:
Собираются работать как crontab
Характерная черта
<none>:<none>
изображения2>/dev/null
или нетисточник
Итак, лично я рекомендую сделать это как часть вашего сценария развертывания для образов и контейнеров, сохраняя только самые последние n контейнеров и изображений. Я помечаю свои образы Docker с помощью той же схемы управления версиями, с которой я использую,
git tag
а также всегда отмечаю последний образ Docker как «последний». Это означает, что без очистки чего-либо мои изображения Docker выглядят так:Теперь, конечно, я не хочу, чтобы все мои изображения (или контейнеры) возвращались к вечности на всех моих производственных коробках. Я просто хочу последние 3 или 4 для отката и избавления от всего остального. Unix's
tail
ваш лучший друг здесь. Посколькуdocker images
и то, иdocker ps
другое по порядку, мы можем просто использовать,tail
чтобы выбрать все, кроме первых трех, и удалить их:Запустите его вместе с вашими сценариями развертывания (или локально), чтобы всегда сохранять достаточно изображений для удобного отката, не занимая слишком много места и не загромождая старые изображения.
Лично я могу хранить только один контейнер на своей производственной коробке в любое время, но вы можете сделать то же самое с контейнерами, если хотите больше:
Наконец, в моем упрощенном примере мы имеем дело только с одним репозиторием за раз, но если бы у вас было больше, вы можете просто немного сложнее с той же идеей. Скажем, я просто хочу сохранить последние три изображения из some_repo / some_image. Я могу просто смешаться
grep
иawk
и быть на моем пути:Опять же, та же идея применима и к контейнерам, но вы получите ее к этому моменту, поэтому я перестану приводить примеры.
источник
Использование:
Он принудительно останавливает и удаляет все контейнеры, присутствующие на месте.
источник
sudo docker rm -f $(sudo docker ps -a -q)
.sudo
требуется везде, если вы не добавите своего пользователя в группу «Докер». Я использую Ubuntu 16.10 без sudo, добавив моего пользователя в группу Docker.Удалить 5 самых старых контейнеров:
Посмотрите, сколько контейнеров осталось:
источник
Удалить все остановленные контейнеры.
Это удалит все остановленные контейнеры, получив список всех контейнеров с помощью docker ps -a -q и передав их идентификаторы в docker rm. Это не должно удалять любые запущенные контейнеры, и это скажет вам, что не может удалить запущенный образ.
Удалить все непомеченные изображения
Теперь вы хотите очистить старые изображения, чтобы сэкономить место.
источник
docker ps -aq | xargs docker rm -v
docker rm -f $(docker ps -a -q)
работает в PowerShell / Docker для Windows.Новый способ: spotify / docker-gc сыграет свою роль.
Он поддерживает параметры окружающей среды
Принудительное удаление изображений с несколькими тегами
Принудительное удаление контейнеров
Исключая недавно вышедшие контейнеры и изображения из сборки мусора
Этот параметр также предотвращает удаление изображений, которые были созданы менее чем GRACE_PERIOD_SECONDS секунд назад.
Пробный прогон
Очистка томов потерянных контейнеров CLEAN_UP_VOLUMES = 1
Ссылка: docker-gc
Старый способ сделать:
удалить старые, не работающие контейнеры
удалить все изображения, связанные с неработающими контейнерами Docker
очистка потерянных томов докера для докера версии 1.10.x и выше
На основе периода времени
источник
Удалить все процессы докера:
Удалить конкретный контейнер:
источник
Вы можете использовать следующую команду для удаления вышедших контейнеров:
Вот полный список действий по удалению старых изображений в Docker : Суть удаления старых контейнеров Docker и изображений .
источник
источник
Я всегда использую,
docker rmi $(docker ps -a -q)
чтобы удалить все изображения.Вы можете удалить каталог
/var/lib/docker/graph
приdocker rmi
неудаче.источник
Вы можете удалить только остановленные контейнеры. Останови их всех в начале
docker stop $(docker ps -a -q)
Тогда вы можете удалить
docker rm $(docker ps -a -q)
источник
Попробуйте эту команду для очистки контейнеров и свисающих изображений.
источник
Основные шаги, чтобы остановить / удалить все контейнеры и изображения
Перечислите все контейнеры
docker ps -aq
Остановите все работающие контейнеры
docker stop $(docker ps -aq)
Удалить все контейнеры
docker rm $(docker ps -aq)
Удалить все изображения
docker rmi $(docker images -q)
Примечание. Сначала необходимо остановить все работающие контейнеры, прежде чем удалять их. Также перед удалением изображения вы должны остановить и удалить зависимые контейнеры.
источник
Для всех, кто заинтересовался, я взял пример из qkrijger и превратил его в clear all (остановите и удалите все)
источник
docker rm -f $(docker ps --no-trunc -aq)
источник
источник
Я использую:
удалить вышедшие контейнеры и:
чтобы избавиться от всех непомеченных изображений.
источник