Як використовувати фільтр зображень докера


85

Я вмію писати

docker images --filter "dangling=true"

Які інші фільтри я можу використовувати?

Я можу використати щось подібне?

docker images --filter "running=false"

Відповіді:


90

Docker v1.13.0 підтримує такі умови:

  -f, --filter value    Filter output based on conditions provided (default [])
                        - dangling=(true|false)
                        - label=<key> or label=<key>=<value>
                        - before=(<image-name>[:tag]|<image-id>|<image@digest>)
                        - since=(<image-name>[:tag]|<image-id>|<image@digest>)
                        - reference=(pattern of an image reference)

Або використовуйте grepдля фільтрації зображень за деяким значенням:

$ docker images | grep somevalue

Список літератури


5
Будь ласка, оновіть свою відповідь - наразі, станом на лютий 2017 року, вона підтримує ще кілька параметрів.
Грег Дубіцький

5
Це не ідеально, але використовуючи вищезазначене, ви можете робити такі речі: docker images -f "reference=*/*/*latest"- Це дасть вам щось подібне k8s:30000/github/someImage:latest. або docker images -f "reference=*/*latest"взяв би вас k8s:30000/someImage:latest. якщо ви хочете прибрати їх -docker rmi $(docker images -f "reference=*/*/*latest" -q --no-trunc)
Mark_Eng

Як ми можемо виключити певні зображення за іменем репо?
змінна

40

Ви також можете використовувати REPOSITORYаргумент docker imagesдля фільтрації зображень.

Наприклад, припустимо, що у нас є зображення:

$ docker images
REPOSITORY           TAG          IMAGE ID         CREATED         SIZE
local-foo            latest       17864104b328     2 months ago    100 MB
example.com/bar      latest       b94c37de2801     9 months ago    285 MB
example.com/baz      latest       a004e3ac682c     2 years ago     221 MB

Ми можемо явно фільтрувати для всіх зображень із заданою назвою:

$ docker images example.com/bar
REPOSITORY           TAG          IMAGE ID         CREATED         SIZE
example.com/bar      latest       b94c37de2801     9 months ago    285 MB

Docker також підтримує глобалізацію:

$ docker images "example.com/*"
REPOSITORY           TAG          IMAGE ID         CREATED         SIZE
example.com/bar      latest       b94c37de2801     9 months ago    285 MB
example.com/baz      latest       a004e3ac682c     2 years ago     221 MB

Офіційні документи тут .


3
Зверніть увагу, що *символ підстановки не застосовується до /імені сховища. Отже, в останньому прикладі перераховувати всі зображення з тегом latestкоманда docker images --filter=reference='*:latest'неправильно. Правильна команда docker images --filter=reference='*/*:latest'.
Томаш Залуський,

Весь цей час я шукав --filter name=something- і весь час, простим рішенням було те, що вам взагалі не потрібен (n явний) фільтр!
триплеє

2
Для тих, хто все ще спантеличений ... Якщо ви шукаєте зображення openapitools/openapi-generator-cli, то docker images open*не знайдете його. Але docker images open*/*знайде.
Райан Ланді,

12

У Docker v1.7:

Наразі підтримуються фільтри:

  • бовтається (логічне значення - trueабо false)
  • етикетка ( label=<key>або label=<key>=<value>)

1
Починаючи з Docker v1.12, ви можете фільтрувати за допомогою before=<image-name>[:tag]|<image-id>|<image@digest>&since=(<image-name>[:tag]|<image-id>|<image@digest>)
xwlee

6

Для мене,

docker images -q | while read IMAGE_ID; do
    docker inspect --format='{{.Created}}' --type=image ${IMAGE_ID}
done

зробив фокус. Команда date може видавати вихід у тому ж форматі через

date -Ins --date='10 weeks ago'

що дозволяє мені порівнювати мітки часу. Однак для зручності я все ще використовую фільтр для звисання зображень.


3

зображення sudo docker --filter "running = false"

Для очищення старих зупинених контейнерів ви можете використовувати:
docker container prune

Щоб видалити непозначені зображення, ви можете використовувати:
docker image prune


0

Є ще один приклад, який працює з версією 17.09 ++:

sudo docker rmi $(sudo docker images -f=reference="registry.gitlab.com/example-app" -f "dangling=true" -q)

Пояснення:

  • reference - ми посилаємось на зображення за назвою сховища;
  • dangling=true - ми видаляємо непозначені зображення;
  • -q - означає тихий, показуючи лише числові ідентифікатори зображень, а не цілий рядок.

Ця команда видаляє всі зображення, що мають ім'я сховища "registry.gitlab.com/example-app" та без <none>позначок (мають у стовпці тегів)

Посилання на посилання: https://docs.docker.com/engine/reference/commandline/images/#filtering


0

Щоб додати до оригінальної відповіді, як використовувати фільтр зображень, просто додайте варіант використання для подібного сценарію.

Мій конвеєр CI відновлює докер і кожного разу позначає їх останнім номером коміту, відправляє до сховища докерів.

Однак це призводить до залишкових та невикористаних / небажаних зображень на машині побудови CI. Як крок після публікації, мені потрібно очистити їх усі, навіть ті, що були побудовані зараз, але в той же час хочу залишити свої базові завантажені зображення (такі як OpenJDK, PostGre) невидаленими, щоб уникнути завантаження кожного разу

  1. Додайте / будь-яку мітку у файл Docker (унікальний і не передбачається містити в моїх базових зображеннях)

LABEL built=XYZ

  1. Використання фільтра зображень і просто отримання ідентифікаторів зображень для зображень, які я створив

docker images --quiet --filter label=built=XYZ

  1. Видаліть їх як дію створення збірки

docker rmi -f $(docker images --quiet --filter label=built=XYZ)


-1

FYI, без фільтра, але для видалення всіх зображень під час тестування чи навчання,

образ докера rm -f $ (образ докера ls)

Привітання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.