Chcę usunąć wszystkie wersje obrazów dockera z nazwami, które zawierają dany ciąg ( imagename).
Wypróbowałem poniższe, ale wydaje się, że nie działa:
docker images | grep 'imagename' | xargs -I {} docker rmi
Chcę usunąć wszystkie wersje obrazów dockera z nazwami, które zawierają dany ciąg ( imagename).
Wypróbowałem poniższe, ale wydaje się, że nie działa:
docker images | grep 'imagename' | xargs -I {} docker rmi
Odpowiedzi:
Spróbuj wykonać następujące czynności:
docker rmi $(docker images |grep 'imagename')
Windows Powershell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
Nieco dokładniejsza wersja - grepowanie tylko po nazwie repozytorium:
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker images --format '{{.Repository}}:{{.Tag}}filtruje dane wyjściowe, więc pokazywane są tylko repozytoria i znaczniki (tj foo:latest.). grep 'imagenamefiltruje te wiersze tylko do obrazów, które zawierają imagename. Wstawienie tego $()ocenia to i przechodzi na zewnątrz, docker rmico usuwa te obrazy, które zostały dopasowane.
docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker imagesw rzeczywistości używa pierwszego argumentu pozycyjnego jako nazwy obrazu do filtrowania. Nie są wymagane żadne grep i awk. Ta -qopcja zwróci tylko zgodne identyfikatory obrazów, do których można przesłać docker rmi.
docker rmi --force $(docker images -q 'imagename' | uniq)
uniqJest zobowiązany do usuwania duplikatów, w przypadku, gdy mają ten sam obraz oznaczone inaczej.
Po prostu możesz dodać --forcena końcu polecenia. Lubić:
sudo docker rmi <docker_image_id> --force
Aby uczynić go bardziej inteligentnym , możesz zatrzymać dowolny działający kontener przed usunięciem obrazu:
sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')
sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')
sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force
W docker ps, $ 1 to pierwsza kolumna, tj. Identyfikator kontenera dockera, a $ 3 to trzecia kolumna, tj. Identyfikator obrazu dockera
Uważam, że moja odpowiedź jest prostsza.
Na przykład nazwa twojego obrazu to python_image.
Twój kod powinien wyglądać następująco :
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
Mam nadzieję, że to pomoże.
Otrzymałem też inną zwięzłą odpowiedź. Jedyną zmianą było usunięcie niepotrzebnej -I {}flagi.
docker images | grep 'imagename' | xargs docker rmi
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`
Spowoduje to usunięcie wszystkich obrazów o nazwie „nazwa_obrazu”. W niektórych przypadkach może to spowodować błąd typu „odwołanie do obrazu znajduje się w jednym lub kilku repozytoriach”. W takim przypadku użyj wymuszenia usunięcia.
docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`
Innym sposobem może być:
docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'
Z jakiegoś powodu nie mogłem skorzystać z żadnej z podanych tutaj odpowiedzi. Oto, co zadziałało dla mnie.
docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi
awk '{print $3}'jest ważną częścią. Wydobywa identyfikator z trzeciej kolumny.
U mnie działało ( wersja Dockera 19.03.5 ):
docker rmi $(docker images 'imagename' -q)
Polecenie " docker images 'nazwaobrazu' -q " wyświetli wszystkie identyfikatory obrazów z pojedynczego cudzysłowu, więc połączenie go z docker rmi (lub docker rmi -f do wymuszenia) usunie wszystkie obrazy o wybranej nazwie
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )
Drobna uwaga: z naszych doświadczeń wynika, że od wersji docker 18.03 nie możesz już usuwać nieoznakowanych obrazów na podstawie samej nazwy. Musisz użyć nazwy + tagu, jak podano powyżej, lub użyć identyfikatora.
docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
na przykład, jeśli mam następujące obrazy
REPOSITORY TAG IMAGE ID CREATED SIZE
abcdefg/hij 7.0.0-beta-4.0 3128835950cd 7 days ago 51.4MB
abcdefg/hij-action 7.0.0-beta-4.0 42a7255beb74 7 days ago 97.4MB
abcdefg/hij-test 7.0.0-beta-4.0 17246aed35d0 7 days ago 97.4MB
abcdefg/hij-server 7.0.0-beta-4.0 42c45e561f2c 7 days ago 335MB
abcdefg/hij-init 7.0.0-beta-3.0 f648bb622933 7 days ago 55.2MB
abcdefg/hij-dir 7.0.0-beta-3.0 0db07d3aaccf 7 days ago 97.4MB
abcdefg/hij-mount 7.0.0-beta-3.0 18d1c0e1502c 4 weeks ago 33.7MB
Następnie docker rmi $(docker images --filter=reference="abcd*:*4.0")usunie pierwsze cztery obrazy.
Więcej informacji można znaleźć pod adresem https://docs.docker.com/engine/reference/commandline/images/
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
Przygotuj rozwiązanie tego pytania odpowiadające moim potrzebom, które nie zostało wcześniej opublikowane.
Chciałem, aby dopasować lokalnie zbudowane wizerunki: library/myappże mam przemianowany, oznaczone i pchnął do prywatnej repo: myrepo.org/library/myapp. Po ich wypchnięciu chcę wyczyścić lokalny reg.
I nie obchodzi mnie, czy nic nie zostanie znalezione lub polecenie wyrzuca błąd. W ten sposób dodane || truena końcu do włączenia do skryptów.
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
Opierając się na odpowiedzi @ Aditya, możesz również utworzyć funkcję bash, aby łatwo usunąć obrazy. Umieść tę funkcję w swoim ~/.profile. Utwórz nową sesję powłoki lub zbierz ją za pomocą source ~/.profile.
function drmi() {
docker images | grep $1 | xargs docker rmi
}
Stosowanie:
drmi golang
Informacyjne:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" |grep imagename |grep none)
Podaj ten błąd:
Odpowiedź na błąd od demona: nieprawidłowy format odniesienia
Prawdopodobnie dlatego, że moje obrazy wyglądają tak:
hostname:5000/imagename:<none>
Musiałem użyć identyfikatora obrazu i wykonać to polecenie:
docker rmi `docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`
Aby usunąć opuszczone pojemniki:
docker container rm `docker container ls -a --format "{{.ID}} {{.Image}} {{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`