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
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:
źródło
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
źródło
docker images --format '{{.Repository}}:{{.Tag}}
filtruje dane wyjściowe, więc pokazywane są tylko repozytoria i znaczniki (tjfoo:latest
.).grep 'imagename
filtruje te wiersze tylko do obrazów, które zawierająimagename
. Wstawienie tego$()
ocenia to i przechodzi na zewnątrz,docker rmi
co 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 images
w rzeczywistości używa pierwszego argumentu pozycyjnego jako nazwy obrazu do filtrowania. Nie są wymagane żadne grep i awk. Ta-q
opcja zwróci tylko zgodne identyfikatory obrazów, do których można przesłaćdocker rmi
.uniq
Jest zobowiązany do usuwania duplikatów, w przypadku, gdy mają ten sam obraz oznaczone inaczej.źródło
Po prostu możesz dodać
--force
na 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:
W
docker ps
, $ 1 to pierwsza kolumna, tj. Identyfikator kontenera dockera, a $ 3 to trzecia kolumna, tj. Identyfikator obrazu dockeraźródło
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.
źródło
Otrzymałem też inną zwięzłą odpowiedź. Jedyną zmianą było usunięcie niepotrzebnej
-I {}
flagi.docker images | grep 'imagename' | xargs docker rmi
źródło
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.
Innym sposobem może być:
źródło
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.źródło
U mnie działało ( wersja Dockera 19.03.5 ):
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
źródło
źródło
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.
źródło
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
na przykład, jeśli mam następujące obrazy
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/
źródło
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
|| true
na końcu do włączenia do skryptów.źródło
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
.Stosowanie:
źródło
Informacyjne:
Podaj ten błąd:
Prawdopodobnie dlatego, że moje obrazy wyglądają tak:
Musiałem użyć identyfikatora obrazu i wykonać to polecenie:
Aby usunąć opuszczone pojemniki:
źródło