Umiem pisać
docker images --filter "dangling=true"
Jakich innych filtrów mogę używać?
Mogę użyć czegoś takiego?
docker images --filter "running=false"
Odpowiedzi:
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
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)
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
*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'.
--filter name=something- i przez cały czas prostym rozwiązaniem było to, że w ogóle nie potrzebujesz (n wyraźnego) filtra!
openapitools/openapi-generator-cli, docker images open*nie znajdziesz go. Ale docker images open*/*znajdę to.
W wersji Docker 1.7:
Aktualnie obsługiwane filtry to:
truelub false)label=<key>lub label=<key>=<value>)before=<image-name>[:tag]|<image-id>|<image@digest>&since=(<image-name>[:tag]|<image-id>|<image@digest>)
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.
obrazy sudo docker --filter "running = false"
Do czyszczenia starych, zatrzymanych pojemników możesz użyć:
docker container prune
Aby usunąć nieoznakowane obrazy, możesz użyć:
docker image prune
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