Jak używać filtra obrazów Dockera

84

Umiem pisać

docker images --filter "dangling=true"

Jakich innych filtrów mogę używać?

Mogę użyć czegoś takiego?

docker images --filter "running=false"
Montells
źródło

Odpowiedzi:

89

Docker 1.13.0 obsługuje następujące warunki:

  -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)

Lub użyj, grepaby filtrować obrazy według określonej wartości:

$ docker images | grep somevalue

Bibliografia

badanie
źródło
5
Zaktualizuj swoją odpowiedź - obecnie od lutego 2017 obsługuje kilka dodatkowych parametrów.
Greg Dubicki
5
To nie jest idealne, ale korzystając z powyższego możesz zrobić takie rzeczy, jak docker images -f "reference=*/*/*latest"- To da ci coś podobnego k8s:30000/github/someImage:latest. albo docker images -f "reference=*/*latest"cię złapie k8s:30000/someImage:latest. jeśli chcesz je posprzątać -docker rmi $(docker images -f "reference=*/*/*latest" -q --no-trunc)
Mark_Eng
Jak możemy wykluczyć określone obrazy według nazwy repozytorium?
zmienna
40

Możesz także użyć REPOSITORYargumentu do, docker imagesaby filtrować obrazy.

Załóżmy na przykład, że mamy obrazy:

$ 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

Możemy jawnie filtrować wszystkie obrazy o podanej nazwie:

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

Docker obsługuje również globbing:

$ 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

Oficjalne dokumenty tutaj .

Wilfred Hughes
źródło
3
Zauważ, że *znak wieloznaczny nie ma zastosowania /w nazwie repozytorium. Dlatego w ostatnim przykładzie, aby wyświetlić wszystkie obrazy ze znacznikiem, latestpolecenie docker images --filter=reference='*:latest'jest nieprawidłowe. Prawidłowe polecenie to docker images --filter=reference='*/*:latest'.
Tomáš Záluský
Przez cały ten czas szukałem --filter name=something- i przez cały czas prostym rozwiązaniem było to, że w ogóle nie potrzebujesz (n wyraźnego) filtra!
tripleee
2
Dla tych, którzy wciąż są zaskoczeni ... Jeśli szukasz obrazu openapitools/openapi-generator-cli, docker images open*nie znajdziesz go. Ale docker images open*/*znajdę to.
Ryan Lundy
12

W wersji Docker 1.7:

Aktualnie obsługiwane filtry to:

  • wiszące (boolean - truelub false)
  • etykieta ( label=<key>lub label=<key>=<value>)
Ertuğrul Altınboğa
źródło
1
Począwszy od wersji 1.12 platformy Docker, możesz filtrować za pomocą before=<image-name>[:tag]|<image-id>|<image@digest>&since=(<image-name>[:tag]|<image-id>|<image@digest>)
xwlee
6

Dla mnie,

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

załatwił sprawę. Polecenie date jest w stanie wygenerować dane wyjściowe w tym samym formacie za pośrednictwem

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

co pozwala mi porównać sygnatury czasowe. Jednak dla wygody nadal używam filtra do zwisających obrazów.

wmbolle
źródło
0

Jest inny przykład, działa z wersją 17.09 ++:

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

Wyjaśnienie:

  • reference - odwołujemy się do obrazów według nazwy repozytorium;
  • dangling=true - usuwamy nieoznakowane obrazy;
  • -q - oznacza cicho, pokazując tylko numeryczne identyfikatory obrazów zamiast całej linii.

To polecenie usuwa wszystkie obrazy, które mają nazwę repozytorium „register.gitlab.com/example-app” i nieoznaczone (mają <none>w kolumnie znaczników)

Link referencyjny: https://docs.docker.com/engine/reference/commandline/images/#filtering

Alexander Kim
źródło
-1

Do Twojej wiadomości, bez filtra, ale do usuwania wszystkich obrazów, gdy używasz ich do testowania lub nauki,

obraz docker rm -f $ (obraz docker ls)

Pozdrowienia.

Lew
źródło