Ответ 1
Попробуйте следующее:
docker rmi $(docker images |grep 'imagename')
Windows Powershell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
Я хочу удалить все версии изображений докеров с именами, которые содержат заданную строку (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")
Чуть более точная версия - grepping только по имени репозитория:
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker images
самом деле использует первый позиционный аргумент в качестве имени изображения для фильтрации. Нет grep и awk требуется. Опция -q
будет возвращать только те идентификаторы изображений, которые могут быть переданы в docker rmi
.
docker rmi --force $(docker images -q imagename | uniq)
uniq
требуется для удаления дубликатов, если одно и то же изображение помечено по-разному.
Просто вы можете добавить --force
в конце команды. Подобно:
sudo docker rmi <docker_image_id> --force
Чтобы сделать его более интеллектуальным, вы можете остановить любой работающий контейнер перед удалением изображения:
sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')
sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')
sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force
В docker ps
$ 1 - это 1-й столбец, т.е. Идентификатор контейнера докера, а $ 3 - 3 -й столбец, т.е. Идентификатор образа Docker.
Я также получил еще один краткий ответ. Единственное изменение состояло в том, чтобы удалить ненужный флаг -I {}
.
docker images | grep 'imagename' | xargs docker rmi
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`
Это приведет к удалению всех изображений по имени "imageName". В некоторых случаях это может привести к ошибке, например, "изображение ссылается на один или несколько репозиториев". В этом случае использовать силу delete.
docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`
Другой способ:
docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'
По какой-то причине я не смог использовать ни один из приведенных здесь ответов. Вот что у меня сработало.
docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi
awk '{print $3}'
- важная часть. Извлекает идентификатор из 3-го столбца.
Я считаю свой ответ более простым.
Например, ваше изображение называется python_image
.
Тогда ваш код должен быть:
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
Надеюсь, это поможет.
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )
Незначительное замечание. Судя по тому, что мы переживаем, начиная с докера 18.03, вы больше не можете удалять непомеченные изображения, основываясь только на имени. Вы должны либо использовать тег name +, как указано выше, либо использовать идентификатор.
docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
например, если у меня есть следующие изображения
REPOSITORY TAG IMAGE ID CREATED SIZE
abcdefg/hij 7.0.0-beta-4.0 3128835950cd 7 days ago 51.4MB
abcdefg/hij-action 7.0.0-beta-4.0 42a7255beb74 7 days ago 97.4MB
abcdefg/hij-test 7.0.0-beta-4.0 17246aed35d0 7 days ago 97.4MB
abcdefg/hij-server 7.0.0-beta-4.0 42c45e561f2c 7 days ago 335MB
abcdefg/hij-init 7.0.0-beta-3.0 f648bb622933 7 days ago 55.2MB
abcdefg/hij-dir 7.0.0-beta-3.0 0db07d3aaccf 7 days ago 97.4MB
abcdefg/hij-mount 7.0.0-beta-3.0 18d1c0e1502c 4 weeks ago 33.7MB
Затем docker rmi $(docker images --filter=reference="abcd*:*4.0")
удалит первые четыре изображения.
Дополнительную информацию см. на странице https://docs.docker.com/engine/reference/commandline/images/.
Составьте решение этого вопроса, чтобы удовлетворить мои потребности, которое не было опубликовано ранее.
Я хотел сопоставить локально созданные изображения: library/myapp
, который я переименовал, пометил и отправил в частное хранилище: myrepo.org/library/myapp
. После того, как они будут нажаты, я хочу очистить локальную панель управления док.
И мне все равно, если ничего не найдено или команда выдает ошибку. Таким образом, в конце добавлен || true
для включения в сценарии.
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
Основываясь на ответе @Aditya, вы также можете создать функцию bash для удобного удаления изображений. Поместите эту функцию на ваш ~/.profile
. Создайте новый сеанс оболочки или создайте его с помощью source ~/.profile
.
function drmi() {
docker images | grep $1 | xargs docker rmi
}
Использование:
drmi golang