próbuję
docker rmi c565603bc87f
Błąd:
Odpowiedź na błąd od demona: konflikt: nie można usunąć c565603bc87f (nie można wymusić) - obraz ma zależne obrazy podrzędne
Więc nie mogę usunąć obrazu nawet z flagą -f. Jak wtedy usunąć obraz i wszystkie jego dzieci?
Wersja Linux i Docker:
uname -a Linux goracio-pc 4.4.0-24-generic # 43-Ubuntu SMP środa 8 czerwca 19:27:37 UTC 2016 x86_64 x86_64 x86_64 GNU / Linux
wersja docker Klient: Wersja: 1.11.2 Wersja API: 1.23 Go Wersja: go1.5.4 Git zatwierdzenie: b9f10c9 Utworzono: środa 1 czerwca 22:00:43 2016 System operacyjny / Arch: linux / amd64
Serwer: Wersja: 1.11.2 Wersja API: 1.23 Go Wersja: go1.5.4 Git Commit: b9f10c9 Rok budowy: środa 1 czerwca 22:00:43 2016 System operacyjny / Arch: linux / amd64
docker
docker-image
rzymski
źródło
źródło
Odpowiedzi:
Przed usunięciem obrazu należy spróbować usunąć niepotrzebne obrazy:
Następnie uruchom:
źródło
prune
> "docker rmi" requires at least 1 argument.
--filter=dangling=true
. Jeśli nadal otrzymujesz ten błąd, oznacza to po prostu, że nie masz żadnych wiszących obrazów, a więc polecenie w zestawie oblicza jako pusty ciąg.W niektórych przypadkach (jak w moim przypadku) możesz próbować usunąć obraz , określając identyfikator obrazu, który ma wiele tagów , o których istnieniu nie zdajesz sobie sprawy, a niektóre z nich mogą być używane przez inne obrazy. W takim przypadku możesz nie chcieć usuwać obrazu .
Jeśli masz przypadek nadmiarowych tagów, jak opisano tutaj, zamiast
docker rmi <image_id>
używaćdocker rmi <repo:tag>
na zbędnym tagu, który chcesz usunąć.źródło
docker rmi <repo:tag>
zadziałało dla mnie Twoje rozwiązanie jest dość proste wśród tych odpowiedzi, dziękuję.Untagged: drud/ddev-webserver:20200301_leymannx_apache-junk-built
repo:tag
ponieważ tworzy osiem oznaczonych obrazów, które mają tylko dwa identyfikatory obrazów. Nawet Visual Studio nie usunie ich w swoim oknie zarządzania kontenerami ...docker rmi <repo:tag>
tylko odznacza , niekoniecznie usuwa obraz. Jeśli istnieje więcej niż jeden znacznik odwołujący się do tego obrazu lub jeśli występuje inny problem, taki jak np. Ten podany przez OP, obraz nadal tam będzie. Możesz sprawdzić, czy obraz nadal istnieje za pomocą poleceniadocker images ls --all
.wszystkie poprzednie odpowiedzi są poprawne, ale oto jedno rozwiązanie, które po prostu wymusza usunięcie wszystkich twoich obrazów ( użyj tego polecenia na własne ryzyko, spowoduje to usunięcie wszystkich twoich obrazów )
źródło
docker image rm $(docker image ls -a -q) -f
znajdź identyfikator obrazu i identyfikator nadrzędny dla wszystkich obrazów utworzonych po obrazie, o którym mowa, za pomocą następujących elementów:
Następnie wywołujesz polecenie:
„sub_image_id” to identyfikator zależnego obrazu
źródło
Pomogło mi użycie kombinacji REPOSITORY: TAG zamiast IMAGE ID.
Kiedy próbowałem usunąć obraz dockera za pomocą polecenia
docker rmi <IMAGE ID>
bez kontenerów skojarzonych z tym obrazem, otrzymałem komunikat:Mogłem usunąć z powodzeniem, gdy użyłem polecenia
docker rmi RPOSITORY:TAG
źródło
docker rmi 93fd78260bd1
nie powiodło się, ale potem siędocker tag 93fd78260bd1 ubuntu:temp && docker rmi ubuntu:temp
udało.Untagged: ubuntu:18.04v1
). Jeśli to zrobiszdocker images -a
, prawdopodobnie3f66bec2c6bf
nadal zobaczysz listę. Gdyby obraz został naprawdę usunięty,Deleted: 3f66bec2c6bf
TO POLECENIE USUWA WSZYSTKIE OBRAZY (UŻYWAJ OSTRZEŻENIE)
Czy próbowałeś użyć --force
Powyższy kod działa jak urok, nawet ja miałem ten sam problem
źródło
Tutaj odpowiedzią jest znalezienie wszystkich potomków, na co odpowiedź ma tutaj:
docker jak mogę uzyskać listę zależnych obrazów podrzędnych?
Następnie użyj tego, aby usunąć kolejno obrazy podrzędne.
źródło
Oto skrypt służący do usuwania obrazu i wszystkich obrazów, które od niego zależą.
źródło
Następnie użyj polecenia zgodnie z sugestią Nguyena.
źródło
Opierając się na metodzie brute force Simon Brady tutaj , jeśli nie mają mnóstwo zdjęć, które można używać tej funkcji powłoki:
a następnie nazwij to używając
recursive_remove_image <image-id>
.źródło
Dawny:
źródło
Kiedy chcę usunąć nieużywany obraz z nazwą
"<none>"
w dockerze, napotykam problemunable to delete a354bbc7c9b7 (cannot be forced) - image has dependent child images
. Aby rozwiązać ten problem:widać, że mam kilka obrazów o nazwie javaapp: najnowsza i inna nazwa kontenera. Dlatego zabiłem i usunąłem cały kontener „javaapp: latest” z:
Następnie
Więc mogę usunąć wszystkie obrazy z nazwą
"<none>"
powodzenia
źródło
Mam również ten problem, mogłem rozwiązać problem za pomocą poniższych poleceń. może to być przyczyną, że kontener obrazu działa lub kończy pracę, więc przed usunięciem obrazu należy usunąć kontener
docker ps -a -f status = exited: to polecenie pokazuje wszystkie opuszczone kontenery, więc skopiuj identyfikator kontenera, a następnie uruchom poniższe polecenia, aby usunąć kontener
docker rm #containerId: to polecenie usuwa kontener, może to być problem ze wzmianką o „obrazie ma zależne obrazy podrzędne”
Następnie spróbuj usunąć obraz za pomocą poniższego polecenia
docker rmi #ImageId
źródło
Miałem ten problem i żadna z krótkich odpowiedzi nie zadziałała, nawet na stronie wspomnianej powyżej przez @tudor. Pomyślałem, że podzielę się tutaj, jak pozbyłem się obrazów. Wpadłem na pomysł, że obrazy zależne muszą mieć> = rozmiar obrazu nadrzędnego, co pomaga go zidentyfikować, abyśmy mogli go usunąć.
Podałem obrazy według rozmiaru, aby zobaczyć, czy mogę dostrzec jakieś korelacje:
Oznacza to użycie specjalnego formatowania z okna dokowanego, aby najpierw ustawić kolumnę rozmiaru obrazu, a następnie przeprowadzić sortowanie czytelne dla człowieka w odwrotnej kolejności. Następnie przywracam łatwe do odczytania kolumny.
Następnie spojrzałem na
<none>
pojemniki i dopasowałem pierwszy na liście o podobnym rozmiarze. Wykonałem prostą operacjędocker rmi <image:tag>
na tym obrazie i wszystkich<none>
obrazy dzieci poszły z nim.Problem ze wszystkimi obrazami podrzędnymi był w rzeczywistości tym cholernym
myrepo/getstarted-lab
obrazem, którego użyłem gdy po raz pierwszy zacząłem bawić się dockerem. To dlatego, że stworzyłem nowy obraz z pierwszego obrazu testowego, który utworzył łańcuch.Mam nadzieję, że w pewnym momencie pomoże to komuś innemu.
źródło
Załóżmy, że mamy plik Dockerfile
Z tego budujemy obraz bez TAG-a czy nazewnictwa
Teraz mamy raport o sukcesie „Zbudowano pomyślnie 57ca5ce94d04” Jeśli widzimy obrazy dockera
Musimy najpierw usunąć
docker rmi 57ca5ce94d04
Śledzony przez
Ten obraz zostanie usunięty!
Wymuszone usunięcie wszystkiego, zgodnie z sugestią kogoś
źródło
Rozszerzanie odpowiedzi udzielonej przez @Nguyen - tę funkcję można dodać do swojego
.bashrc
itp., A następnie wywołać z wiersza poleceń, aby pomóc wyczyścićimage has dependent child images
błędy ...Możesz uruchomić tę funkcję samodzielnie, a jeśli się
docker ps
nie powiedzie, uruchomidocker
poleceniesudo
i poprosi o podanie hasła.Czy nie kasować obrazy za systemem pojemników!
Mam to też w swoich
.bashrc
aktach ...Pracuje z:
źródło
Wymuś usunięcie listy obrazów (na przykład wyklucz wersję 10)
źródło
możesz po prostu to zrobić:
➜ ~ sudo doker RMI 4ed13257bb55 -f Deleted: sha256: 4ed13257bb5512b975b316ef482592482ca54018a7728ea1fc387e873a68c358 Deleted: sha256: 4a478ca02e8d2336595dcbed9c4ce034cd15f01229733e7d93a83fbb3a9026d3 Deleted: sha256: 96df41d1ce6065cf75d05873fb1f9ea9fed0ca86addcfcec7722200ed3484c69 Deleted: sha256: d95efe864c7096c38757b80fddad12819fffd68ac3cc73333ebffaa42385fded
źródło
Warstwa obrazu: repozytoria są często nazywane obrazami lub obrazami kontenerów, ale w rzeczywistości składają się z jednej lub więcej warstw. Warstwy obrazów w repozytorium są połączone ze sobą w relacji rodzic-dziecko. Każda warstwa obrazu reprezentuje zmiany między nią a warstwą macierzystą.
Wzorzec budowania Dockera korzysta z dziedziczenia . Oznacza to, że wersja
i
zależy od wersjii-1
. Musimy więc usunąć wersję,i+1
aby móc usunąć wersjęi
. To jest prosta zależność.Jeśli chcesz usunąć wszystkie obrazy z wyjątkiem ostatniego (najbardziej zaktualizowanego) i pierwszego (podstawowego), możemy wyeksportować ostatni (najbardziej zaktualizowany) za pomocą
docker save
polecenia jak poniżej.Następnie usuń wszystkie obrazy, używając identyfikatora obrazu, jak poniżej.
Teraz załaduj zapisany obraz tgz, jak poniżej.
zobacz identyfikator obrazu załadowanego obrazu za pomocą docker ps -q. Nie ma tagu ani nazwy. Możesz po prostu zaktualizować tag i nazwę, jak pokazano poniżej.
źródło