Подтвердить что ты не робот

Как удалить Docker изображения по тегу, желательно с помощью подстановочных знаков?

У меня есть некоторые автоматизированные процессы, которые вырывают кучу изображений Docker, помеченных значащими ярлыками. Этикетки следуют структурированному шаблону.

Есть ли способ найти и удалить изображения по тегу? Поэтому предположим, что у меня есть изображения:

REPOSITORY                  TAG
junk/root                   stuff_687805
junk/root                   stuff_384962

В идеале я хотел бы иметь возможность делать: docker rmi -tag stuff _ *

Любой хороший способ имитировать это?

4b9b3361

Ответ 1

Развлечения с bash:

docker rmi $(docker images | grep stuff_ | tr -s ' ' | cut -d ' ' -f 3)

Ответ 2

Использование только фильтрации докеров:

 docker rmi $(docker images --filter=reference="*:stuff_*" -q)
  • reference="*:stuff_*" фильтр позволяет фильтровать изображения с помощью шаблона;
  • -q опция предназначена для отображения только идентификаторов изображений.

Ответ 3

Вы также можете выполнить его с помощью grep + args + xargs:

docker images | grep "stuff_" | awk '{print $1 ":" $2}' | xargs docker rmi
  • изображения докеров перечислены все изображения
  • grep выбирает линии на основе поиска "_stuff"
  • awk будет печатать первый и второй аргументы этих строк (имя изображения и имя тега) с двоеточием между
  • xargs будет запускать команду docker rmi, используя каждую строку, возвращаемую awk как аргумент

Примечание: будьте осторожны с поиском grep, так как он может также соответствовать чему-то, кроме тега, поэтому лучше сначала выполнить сухой запуск:

docker images | grep "stuff_" | awk '{print $1 ":" $2}' | xargs -n1 echo
  • xargs -n1 флаги -n1 означают, что xargs не будет группировать строки, возвращаемые awk вместе, но повторяйте их поочередно (для лучшей читаемости)

Ответ 4

Docker предоставляет несколько filtering, которые вы можете использовать с labels, но я не вижу поддержки подстановочных знаков.

docker images -f "label=mylabel=myvalue"

Кроме того, чтобы добавить метки к изображению, вы должны добавить информацию в Dockerfile с помощью команды LABEL. Я не мог найти способ добавить метки к изображению, если вы не изменили Dockerfile (т.е. не смогли найти параметр командной строки), хотя вы можете добавить их в контейнеры во время выполнения с --label и --label-file (запустить docs).

Ответ 5

docker rmi $ (изображения докера | grep stuff | tr -s '' | cut -d '' -f 3)

Ответ 6

Я бы использовал идентификатор изображения для удаления изображений, тег "1.2.3":

docker rmi $(docker images | awk '$2~/1.2.3/{print $3}')