Как получить значение с помощью команды Linux grep - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу получить определенную c информацию с docker API. В этом случае я хочу получить IMAGE ID, который соответствует <none> из REPOSITORY с командой docker images

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              ebeb5aebbeef        5 minutes ago       479MB
build-embed         latest              80636e4726f8        10 minutes ago      479MB
<none>              <none>              a2abf2e07bc3        About an hour ago   1.38GB
ubuntu              18.04               4e5021d210f6        5 weeks ago         64.2MB

Я попробовал команду, как показано ниже:

$ docker images | grep `<none>'

И получить результаты:

<none>              <none>              ebeb5aebbeef        2 minutes ago       479MB
<none>              <none>              a2abf2e07bc3        58 minutes ago      1.38GB

Как я могу просто получить только IMAGE ID? (как ebeb5aebbeef a2abf2e07bc3)

Цель этого вопроса состоит в том, что я хочу удалить <none> изображения с docker API, например, docker rmi $(docker images | grep <none>

Спасибо всем

Ответы [ 3 ]

3 голосов
/ 28 апреля 2020

Использовать - параметр фильтра с параметром -q вместо того, чтобы перечислять все изображения и фильтровать их, используя grep

docker images -f "dangling=true" -q
3 голосов
/ 28 апреля 2020

Используйте awk, чтобы получить только третье поле совпадающих строк.

docker images | awk '$1 == "<none>" { print $3 }'

Не используйте grep '<none>', поскольку оно может совпадать в полях, отличных от REPOSITORY.

1 голос
/ 28 апреля 2020

Команда docker images имеет несколько опций, позволяющих сделать это более напрямую, без попыток разобрать ее вывод.

docker images -f может фильтровать Список изображений представлен на минимальном наборе условий. Одним из таких условий является «висячие», то есть именно те изображения с метками <none>. Это может заменить вашу команду grep.

docker images -q выводит только идентификаторы изображений, а не остальную часть строки. Это может заменить команду awk из @ ответа Бармара .

Это позволит вам

docker images -f dangling=true -q

распечатать идентификаторы изображений <none> изображений , что вы ищете; и тем самым

docker images -f dangling=true -q | xargs docker rmi

для их удаления.

Также рассмотрим docker system prune, который удалит висящие изображения, а также остановит контейнеры и неиспользуемые сети.

...