Я хочу удалить все версии образов докеров с именами, содержащими заданную строку ( imagename
).
Я пробовал следующее, но похоже, что это не работает:
docker images | grep 'imagename' | xargs -I {} docker rmi
Попробуйте следующее:
docker rmi $(docker images |grep 'imagename')
Windows Powershell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
Чуть более точная версия - поиск только по имени репозитория:
источник
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
источник
docker images --format '{{.Repository}}:{{.Tag}}
фильтрует вывод, поэтому отображаются только репо и тег (т.е.foo:latest
).grep 'imagename
фильтрует эти строки только теми изображениями, которые содержатimagename
. Ввод этого$()
оценивает это и переходит к внешнему,docker rmi
который удаляет те изображения, которые были сопоставлены.docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
фактически использует первый позиционный аргумент как имя изображения для фильтрации. Никаких grep и awk не требуется.-q
Вариант будет возвращать только идентификаторы подходящих изображений , которые могут быть поданы вdocker rmi
.Это
uniq
необходимо для удаления дубликатов, если одно и то же изображение помечено по-разному.источник
Просто можно добавить
--force
в конце команды. Подобно:sudo docker rmi <docker_image_id> --force
Чтобы сделать его более интеллектуальным, вы можете остановить любой работающий контейнер перед удалением образа:
В
docker ps
, $ 1 - это 1-й столбец, т.е. идентификатор контейнера докеров, а $ 3 - это 3-й столбец, т.е. идентификатор образа докера.источник
Я считаю свой ответ более простым.
Например, имя вашего изображения
python_image
.Тогда ваш код должен быть :
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
Надеюсь, это поможет.
источник
Я также получил еще один краткий ответ. Единственное изменение - убрать ненужный
-I {}
флаг.docker images | grep 'imagename' | xargs docker rmi
источник
Это приведет к удалению всех изображений по имени imageName. В некоторых случаях это может привести к ошибке типа «изображение ссылается на один или несколько репозиториев». В этом случае используйте принудительное удаление.
Другой способ может быть:
источник
По какой-то причине я не смог использовать здесь ни один из приведенных ответов. Вот что у меня сработало.
docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi
awk '{print $3}'
это важная часть. Он извлекает идентификатор из 3-го столбца.источник
У меня сработало ( версия Docker 19.03.5 ):
Команда « docker images 'imagename' -q » перечислит все идентификаторы изображений для одного аргумента в кавычках, поэтому, объединив его с docker rmi (или docker rmi -f для принудительного), он удалит все изображения с выбранным именем
источник
источник
Незначительное замечание: из того, что мы переживаем, кажется, что вы - начиная с docker 18.03 - больше не можете удалять немаркированные изображения на основе только имени. Вам нужно либо использовать тег name +, как указано выше, либо использовать идентификатор.
источник
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
например, если у меня есть следующие изображения
Затем
docker rmi $(docker images --filter=reference="abcd*:*4.0")
будут удалены первые четыре изображения.Дополнительную информацию см. На https://docs.docker.com/engine/reference/commandline/images/.
источник
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
Составьте для меня решение этого вопроса, которое ранее не публиковалось.
Я хотел , чтобы соответствовать локально встроенным изображениям:
library/myapp
что я переименовал, помеченный, и подтолкнул к частному репо:myrepo.org/library/myapp
. Как только они будут отправлены, я хочу очистить локальную регистрацию докеров.И мне все равно, если ничего не найдено или команда выдает ошибку. Таким образом добавляется
|| true
в конце для включения в скрипты.источник
Основываясь на ответе @ Aditya, вы также можете создать функцию bash, чтобы легко удалять изображения. Поместите эту функцию в свой
~/.profile
. Создайте новый сеанс оболочки или создайте его с помощьюsource ~/.profile
.Применение:
источник
Информационная:
Выдайте эту ошибку:
Наверное потому, что мои изображения выглядят так:
Мне пришлось использовать идентификатор изображения и выполнить эту команду:
Чтобы удалить вышедшие контейнеры:
источник