Mam następujące obrazy:
alex@alexvps:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> 70c0e19168cf 5 days ago 1.069 GB
<none> <none> c2ce80b62174 8 days ago 399.2 MB
<none> <none> 60afe4036d97 8 days ago 325.1 MB
a kiedy próbuję usunąć jeden z nich, otrzymuję:
alex@alexvps:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images
Jak mogę je usunąć? Dlaczego jest taki konflikt?
docker images -q | %{docker rmi -f $_}
sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
docker ps -a -q | %{docker rm -f $_}
docker system prune
. Więc wytrzyj wszystko:docker kill $(docker ps -q)
aby zatrzymać pojemniki, a następniedocker system prune -a
usunie wszystko - patrz stackoverflow.com/a/44309011/247708Możliwy powód: Przyczyną może być to, że ten obraz jest aktualnie używany przez działający kontener. W takim przypadku możesz wyświetlić listę uruchomionych kontenerów, zatrzymać odpowiedni kontener, a następnie usunąć obraz:
Jeśli nie możesz znaleźć kontenera za pomocą dokera ps, możesz użyć tego, aby wyświetlić listę wszystkich już opuszczonych kontenerów i usunąć je.
Uwaga: w przypadku korzystania z kontenerów należy zachować ostrożność, usuwając jednocześnie wszystkie opuszczone
Volume-Only
pojemniki. Pozostają one wExit
stanie, ale zawierają przydatne dane .źródło
sudo docker ps -a | grep Exit | awk '{print $1}' | sudo xargs docker rm
(dzięki github.com/dotcloud/docker/issues/3258 ), a następnie zsudo docker rmi 70c0e19168cf
Exit
stanie. Jeśli korzystasz z kontenerów zawierających tylko wolumin danych, nie działają one nadal.awk '/Exit/ {print $1}'
Error response from daemon: No such container: ...
. Trudno powiedzieć, co należy wymienić i co powinienem zastąpić. Nie używaj...
Przyczyną tego błędu jest to, że chociaż obraz nie ma żadnego znacznika, nadal istnieje kontener utworzony na tym obrazie, który może być w
exited
stanie. Musisz więc upewnić się, że zatrzymałeś i usunąłeś wszystkie kontenery utworzone na tych obrazach. Poniższe polecenie pomaga usunąć wszystkie nie uruchomione kontenery:Teraz usuwa wszystkie wiszące
<none>
obrazy niebezpośrednie :źródło
Obraz może być obecnie używany przez działający kontener, więc najpierw musisz zatrzymać i usunąć kontener (y).
Następnie możesz spróbować usunąć obraz:
Musisz być pewien, że ten obraz nie zależy od innych obrazów (w przeciwnym razie musisz je najpierw usunąć).
Miałem dziwny przypadek, w którym nie miałem już żadnych kontenerów (
docker ps -a
nic nie zwróciłem), ale nie udało mi się usunąć obrazu i jego zależności od obrazu.Aby rozwiązać te specjalne przypadki, możesz wymusić usunięcie obrazu w ten sposób:
źródło
W Bash:
Spowoduje to usunięcie wszystkich obrazów o nazwie „<brak>”. Te obrazy były zbędne.
źródło
docker images|grep \<none\>|awk '{print $3}' | xargs docker rmi
, może potrzebowaćsudo
pozwoleniaZnalazłem odpowiedź w tym poleceniu:
Miałem twój problem, kiedy usunąłem niektóre obrazy, które były używane, i nie zdawałem sobie sprawy (używałem
docker ps -a
).źródło
Od wersji Docker 1.13.0 (styczeń 2017) jest
system prune
polecenie:źródło
Oprócz odpowiedzi Sunny:
Aby usunąć wszystkie obrazy na komputerze z systemem Windows (z Docker dla Windows) w oknie programu PowerShell:
Aby usunąć wszystkie kontenery na komputerze z systemem Windows (z Docker dla Windows) w oknie PowerShell:
źródło
Najpierw usuń wszystkie pojemniki za pomocą następującego polecenia
Następnie usuń obraz według jego identyfikatora za pomocą następującego polecenia
źródło
Najpierw musisz zatrzymać / usunąć wszystkie niepotrzebne pojemniki utworzone na tych obrazach.
Zobacz: Jak usunąć stare kontenery Docker .
Następnie użyj rozwiązania @marcell.
źródło
Usuń wszystkie pojemniki
Wymuś usunięcie wszystkich obrazów Dockera
źródło
Po prostu możesz dodać
--force
na końcu polecenia. Lubić:Aby uczynić go bardziej inteligentnym , możesz dodać jako:
Tutaj w
docker ps
1 $ jest pierwsza kolumna, tj. Identyfikator kontenera Docker.A
docker images
3 USD to trzecia kolumna, tj. Identyfikator obrazu Docker.źródło
Najbardziej kompaktowa wersja polecenia usuwania wszystkich nieoznaczonych obrazów to:
źródło
Aby usunąć część obrazu Docker, musisz wykonać następujące polecenie:
Aby usunąć wszystkie obrazy Dockera, możesz wykonać następujące polecenie:
Teraz, jeśli chcesz usunąć wszystkie obrazy Dockera (w tym obrazy, które są w użyciu), możesz dodać flagę
-f
, na przykład:źródło
Posługiwać się
lub
Usuń wszystkie wiszące obrazy. Jeśli
-a
jest określony, spowoduje to również usunięcie wszystkich obrazów, do których nie odwołuje się żaden kontener.Uwaga: przed usunięciem śliwek zostanie wyświetlony monit o potwierdzenie, ale nie zostanie wyświetlona lista potencjalnie usuniętych plików. Ponadto
docker image ls
nie obsługuje filtrowania negatywnego, dlatego trudno jest przewidzieć, które obrazy zostaną faktycznie usunięte.Jak stwierdzono w dokumentacji Dockera dla śliwek .
źródło
Jeśli chcesz automatycznie / okresowo czyścić opuszczone kontenery i usuwać obrazy i woluminy, które nie są używane przez działający kontener, możesz pobrać obraz Dockera
meltwater/docker-cleanup
.W ten sposób nie musisz czyścić go ręcznie.
Po prostu biegnij:
Będzie działał co 30 minut (lub jak długo ustawisz go za pomocą opcji DELAY_TIME = 1800) i usuniesz opuszczone pojemniki i obrazy.
Więcej informacji: https://github.com/meltwater/docker-cleanup/blob/master/README.md
źródło
Znalazłem rozwiązanie ze skryptem Powershell, które zrobi to za mnie.
Skrypt najpierw zatrzymuje wszystkie kontenery niż usuwa wszystkie kontenery, a następnie usuwa obrazy nazwane przez użytkownika.
Zajrzyj tutaj http://www.devcode4.com/article/powershell-remove-docker-containers-and-images
źródło