Обновление, сентябрь 2016 г .: Docker 1.13: PR 26108 и commit 86de7c0 вводят несколько новых команд, чтобы упростить визуализацию того, сколько места занимают данные демона docker на диске и что позволяет легко очистить «ненужный» избыток.
docker system prune
удалит ВСЕ висячие данные (т.е. по порядку: контейнеры остановлены, тома без контейнеров и изображения без контейнеров). Даже неиспользованные данные, с -a
возможностью.
У вас также есть:
Для неиспользуемых изображений используйте docker image prune -a
(для удаления висячих и незапущенных изображений).
Предупреждение: « не используется » означает «изображения, на которые не ссылается ни один контейнер»: будьте осторожны перед использованием -a
.
Как показано в AL «s ответ , docker system prune --all
будут удалены все неиспользуемые изображения не только оборванных те ... , которые могут быть немного слишком много.
Объединение docker xxx prune
с --filter
опцией может быть отличным способом ограничения сокращения ( Docker SDK API минимум 1.28, поэтому docker 17.04+ )
В настоящее время поддерживаются следующие фильтры:
until (<timestamp>)
- удалять только контейнеры, изображения и сети, созданные до заданной отметки времени
label
( label=<key>
, label=<key>=<value>
, label!=<key>
, Или label!=<key>=<value>
) - только удалить контейнеры, изображения, сети и объемы с (или без , в случае , если label!=...
используется) указанные метки.
См. « Обрезать изображения » для примера.
Оригинальный ответ (сентябрь 2016 г.)
Я обычно делаю:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
У меня есть псевдоним для удаления этих [болтающихся изображений] 13 :drmi
dangling=true
Фильтр находит неиспользуемые изображения
Таким образом, любое промежуточное изображение, на которое больше не ссылается помеченное изображение, удаляется.
Я делаю то же самое в первую очередь для вышедших процессов (контейнеров)
alias drmae='docker rm $(docker ps -qa --no-trunc --filter "status=exited")'
Как haridsv баллов из в комментариях :
Технически, вы должны сначала очистить контейнеры перед очисткой изображений, так как это поймает больше висящих изображений и меньше ошибок .
Джесс Фразелль (jfrazelle) имеет функцию bashrc :
dcleanup(){
docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null
docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null
}
Чтобы удалить старые изображения, а не только изображения без привязок, вы можете рассмотреть следующие вопросы docker-gc
:
Простой Docker-контейнер и скрипт для сборки мусора изображений.
- Контейнеры, вышедшие более часа назад, удаляются.
- Изображения, которые не принадлежат ни одному из оставшихся контейнеров после этого, удаляются.
"dangling=true"
самом деле означает?dcleanup
является удивительным!docker system prune
удаляет гораздо больше, чем просто изображения. Обязательно используйтеdocker image prune
вместо этого. И будьте очень осторожны с-a
: аdocker system prune -a
может иметь разрушительный эффект (также удаляя объемы). Наконец, да,-a
удаляет неиспользуемые изображения, я буду редактировать ответ.Обновление второе (2017-07-08):
Обратитесь (снова) к VonC, используя еще более позднюю версию
system prune
. Нетерпеливый может пропустить приглашение с-f, --force
опцией:Нетерпеливые и безрассудные могут дополнительно удалить «неиспользуемые изображения, а не только свисающие» с помощью
-a, --all
опции:https://docs.docker.com/engine/reference/commandline/system_prune/
Обновить:
Обратитесь к ответу VonC, который использует недавно добавленные
prune
команды. Вот соответствующее удобство псевдонима оболочки:Старый ответ:
Удалить остановленные (вышедшие) контейнеры:
Удалить неиспользуемые (висячие) изображения:
Если вы проявили крайнюю осторожность в отношении безвозвратной потери данных , вы можете удалить неиспользуемые (висячие) тома (версии 1.9 и выше):
Вот они в удобном псевдониме оболочки:
Ссылки:
docker ps -f
docker rm
docker images -f
docker rmi
docker volume ls
docker volume rm
источник
docker volume rm
рецепту. Я буду рад любым предложениям, которые у вас есть.docker volume ls -qf dangling=true | egrep '^[a-z0-9]{64}$' | xargs --no-run-if-empty docker volume rm
будет работать до тех пор, пока вы никогда не назовете свои тома чем-то похожим на guid. Я могу настроить это для нового синтаксиса фильтра.Чтобы удалить старые помеченные изображения, возраст которых превышает месяц:
Обратите внимание, что не удастся удалить изображения, которые используются контейнером, на который есть ссылка в репозитории, имеют зависимые дочерние изображения ... что, вероятно, то, что вам нужно. Остальное просто добавь
-f
флаг.Пример
/etc/cron.daily/docker-gc
скрипта:источник
.CreatedSince
использует недели в качестве единицы времени при выводе даже на изображения, которым много недель, например12 weeks
.docker images | grep ' months' | awk '{ print $3 }' | xargs --no-run-if-empty docker rmi -f
Другие ответы великолепны, а именно:
Но мне нужно было что-то посередине двух команд, так что
filter
опция была то, что мне нужно:Надеюсь, это поможет :)
Для справки: https://docs.docker.com/config/pruning/#prune-images
источник
Предполагая, что у вас Docker 1.13 или выше, вы можете просто использовать команды удаления. Для вашего вопроса специально для удаления старых изображений, вы хотите первое.
Я бы порекомендовал не привыкать к использованию
docker system prune
команды. Я считаю, что пользователи будут случайно удалять вещи, которые они не имеют в виду. Лично я буду в основном быть с помощьюdocker image prune
иdocker container prune
команды.источник
docker system prune
кроме отдельных черносливов.До сих пор (Docker версия 1.12) мы использовали следующую команду для удаления всех запущенных контейнеров. Также, если мы хотим удалить тома, мы можем сделать это вручную, используя соответствующий тег -v в следующей команде.
Удалить все вышедшие контейнеры
Удалить все остановленные контейнеры
Удалить все запущенные и остановленные контейнеры
Удалить все контейнеры без каких-либо критериев
Но в версии 1.13 и выше для полной очистки системы мы можем напрямую использовать следующую команду:
Все неиспользуемые контейнеры, изображения, сети и тома будут удалены. Мы также можем сделать это с помощью следующих команд, которые очищают отдельные компоненты:
источник
Это сработало для меня:
источник
Следующая команда удалит изображения старше 48 часов.
источник
docker image ls --all --filter reference=monolito --filter before=monolito:0.1.8
а затем применить команду rmi для удаления.docker rmi $(docker image ls -q --all --filter reference=monolito --filter before=monolito:0.1.8)
Я недавно написал скрипт для решения этой проблемы на одном из моих серверов:
источник
Вот скрипт для очистки образов Docker и освобождения места.
Оригинальный сценарий
https://github.com/vishalvsh1/docker-image-cleanup
Обычно Docker хранит все временные файлы, связанные со сборкой изображений и слоями, в
/ Var / Библиотека / Докер
Этот путь является локальным для системы, обычно в корневом разделе «/» .
Вы можете смонтировать место на диске побольше, переместить содержимое
/var/lib/docker
в новое место монтирования и сделать символическую ссылку.Таким образом, даже если образы Docker занимают место, это не повлияет на вашу систему, так как будет использоваться другое место монтирования.
Исходное сообщение: Управление образами Docker на локальном диске.
источник
Я использую эту команду:
Это удалит все изображения, время создания которых превышает 10 недель назад.
источник
IMAGE_CTIME
иBEFORE_DATETIME
в этойecho
командеЕсли вы хотите удалить изображения, извлеченные X месяцев назад, вы можете попробовать следующий пример, который удаляет изображения, созданные три месяца назад:
источник
Чтобы удалить все изображения и тома, а также
docker system prune -af --volumes
источник
docker system prune -a
(Вам будет предложено подтвердить команду. Используйте
-f
для принудительного запуска, если вы знаете, что делаете.)источник
docker system prune
удалении даже именованных томов с помощью-a
.@VonC уже дал очень хороший ответ, но для полноты здесь приведен небольшой скрипт, который я использовал --- и который также уничтожает любые поручающие процессы Docker, если они у вас есть:
источник
Error response from daemon: You cannot remove a running container
. Добавленоdocker kill $(docker ps -q)
перед строкой 3 по адресу$(docker images -q)
вместо$(docker images | awk '/<none>/ { print $3 }')
?docker images -q
получу вектор идентификаторов изображений, ничего больше. Если я делаю то, что делаю, я получаю больше - позволяя фильтровать,<none>
как я здесь. Имеет смысл?Чтобы удалить помеченные изображения, на которых не запущен контейнер, вам придется использовать небольшой скрипт:
источник
Удалите старые контейнеры несколько недель назад.
docker rm $(docker ps -a | grep "weeks" | awk '{ print $1; }')
Удалить старые изображения недель назад. Быть осторожен. Это удалит базовые изображения, которые были созданы несколько недель назад, но которые могут использовать ваши новые изображения.
docker rmi $(docker images | grep 'weeks' | awk '{ print $3; }')
источник
Как удалить помеченное изображение
Докер RMI тег первым
Докер RMI изображение.
# это можно сделать одним вызовом docker rmi, например: # docker rmi <repo: tag> <imageid>
(это работает ноябрь 2016, версия Docker 1.12.2)
например
Например, сценарий удалить все, что старше 2 недель.
источник
сила
все
-q в режиме
источник
или
источник
Иногда я сталкиваюсь с проблемами, когда Docker выделяет и продолжает использовать дисковое пространство, даже если пространство не выделено для какого-либо конкретного образа или существующего контейнера. Последний случай, когда я сгенерировал эту проблему, случайно использовал сборку centos «docker-engine» вместо «docker» в RHEL 7.1. Кажется, что иногда случается, что очистка контейнеров не завершается успешно, и тогда пространство никогда не используется повторно. Когда 80-гигабайтный диск, который я выделил как / был заполнен файлами / var / lib / docker, мне пришлось придумать творческий способ решить проблему.
Вот что я придумал. Сначала устраните ошибку переполнения диска:
В этот момент у меня больше не было ошибки переполнения диска, но я все еще тратил огромное количество места. Следующие шаги должны позаботиться об этом.
Запустите Docker: systemctl запустите Docker
Сохраните все изображения: docker save $ (изображения docker | sed -e '/ ^ / d' -e '/ ^ REPOSITORY / d' -e 's, [] [] ,:,' -e 's, [ ]. ,, ')> /root/docker.img
Удалить докер.
Стереть все в / var / lib / docker: rm -rf / var / lib / docker / [cdintv] *
Переустановите докер
Включить докер: systemctl включить докер
Запустить докер: systemctl запустить докер
Восстановление изображений: загрузка докера </root/docker.img
Запустите все постоянные контейнеры, которые вам нужны.
Это уменьшило использование моего диска с 67 ГБ для докера до 6 ГБ для докера.
Я не рекомендую это для повседневного использования. Но полезно запускать, когда похоже, что докер потерял отслеживание использованного дискового пространства из-за программных ошибок или неожиданных перезагрузок.
источник
Если вы хотите автоматически / периодически очищать закрытые контейнеры и удалять изображения и тома, которые не используются запущенным контейнером, вы можете загрузить изображение
meltwater/docker-cleanup
.Просто беги:
Он запускается каждые 30 минут по умолчанию. Однако вы можете установить время задержки, используя этот флаг в секундах (опция DELAY_TIME = 1800).
Более подробная информация: https://github.com/meltwater/docker-cleanup/blob/master/README.md
источник
Если вы создаете эти сокращенные образы самостоятельно (из некоторых других, более старых базовых образов), пожалуйста, будьте осторожны с принятыми выше решениями, основанными на том
docker image prune
, что команда является тупой и постарается удалить также все зависимости, требуемые вашими последними изображениями (команда должна быть вероятно переименован вdocker image*s* prune
).Решение, которое я нашел для моих конвейеров сборки образа докера (где есть ежедневные сборки и теги = даты в
YYYYMMDD
формате), заключается в следующем:источник
Есть воробей-плагин docker-remove-dangling-images, который вы можете использовать для очистки остановленных контейнеров и неиспользуемых (висячих) изображений:
$ sparrow plg run docker-remove-dangling-images
Работает как для Linux, так и для Windows.
источник
Первый забег
docker images
чтобы увидеть список изображений и скопировать ИД ИЗОБРАЖЕНИЯ в буфер обмена.Запустить
docker rmi -f <Image>
Помните, что опция
-f
принудительного удаления.источник