Как удалить изображения докеров по имени?

Я хочу удалить все версии изображений докеров с именами, которые содержат заданную строку (imagename).
Я попробовал ниже, но, похоже, не работает:

docker images | grep 'imagename' | xargs -I {} docker rmi

Ответы

Ответ 1

Попробуйте следующее:

docker rmi $(docker images |grep 'imagename')

Windows Powershell:

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")

Ответ 2

Чуть более точная версия - grepping только по имени репозитория:

docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

Ответ 3

docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

Ответ 4

docker images самом деле использует первый позиционный аргумент в качестве имени изображения для фильтрации. Нет grep и awk требуется. Опция -q будет возвращать только те идентификаторы изображений, которые могут быть переданы в docker rmi.

docker rmi --force $(docker images -q imagename | uniq)

uniq требуется для удаления дубликатов, если одно и то же изображение помечено по-разному.

Ответ 5

Просто вы можете добавить --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.

Ответ 6

Я также получил еще один краткий ответ. Единственное изменение состояло в том, чтобы удалить ненужный флаг -I {}.

docker images | grep 'imagename' | xargs docker rmi

Ответ 7

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}'

Ответ 8

По какой-то причине я не смог использовать ни один из приведенных здесь ответов. Вот что у меня сработало.

docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi

awk '{print $3}' - важная часть. Извлекает идентификатор из 3-го столбца.

Ответ 9

Я считаю свой ответ более простым.

Например, ваше изображение называется python_image.

Тогда ваш код должен быть:

docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")

Надеюсь, это поможет.

Ответ 10

docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )

Ответ 11

Незначительное замечание. Судя по тому, что мы переживаем, начиная с докера 18.03, вы больше не можете удалять непомеченные изображения, основываясь только на имени. Вы должны либо использовать тег name +, как указано выше, либо использовать идентификатор.

docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'

Ответ 12

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/.

Ответ 13

Составьте решение этого вопроса, чтобы удовлетворить мои потребности, которое не было опубликовано ранее.

Я хотел сопоставить локально созданные изображения: library/myapp, который я переименовал, пометил и отправил в частное хранилище: myrepo.org/library/myapp. После того, как они будут нажаты, я хочу очистить локальную панель управления док.

И мне все равно, если ничего не найдено или команда выдает ошибку. Таким образом, в конце добавлен || true для включения в сценарии.

docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true

Ответ 14

Основываясь на ответе @Aditya, вы также можете создать функцию bash для удобного удаления изображений. Поместите эту функцию на ваш ~/.profile. Создайте новый сеанс оболочки или создайте его с помощью source ~/.profile.

function drmi() {
    docker images | grep $1 |  xargs docker rmi
}

Использование:

drmi golang