Próbuję usunąć obraz i otrzymuję:
# docker rmi f50f9524513f
Failed to remove image (f50f9524513f): Error response from daemon: conflict: unable to delete f50f9524513f (cannot be forced) - image has dependent child images
To jest wersja dockera:
# docker version
Client:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: linux/amd64
Server:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: linux/amd64
ale nie ma dodatkowych informacji:
# docker images --format="raw" | grep f50f9524513f -C3
repository: debian
tag: 8
image_id: f50f9524513f
created_at: 2016-03-01 18:51:14 +0000 UTC
virtual_size: 125.1 MB
repository: debian
tag: jessie
image_id: f50f9524513f
created_at: 2016-03-01 18:51:14 +0000 UTC
virtual_size: 125.1 MB
Jak mogę uzyskać obrazy dziecka na utrzymaniu, które twierdzi, że ma?
nie ma uruchomionych ani zatrzymanych kontenerów z tym identyfikatorem obrazu.
linux
docker
containers
nikocezar
źródło
źródło
Odpowiedzi:
Krótka odpowiedź: Oto skrypt python3, który wyświetla zależne obrazy dockera .
Długa odpowiedź: możesz zobaczyć identyfikator obrazu i identyfikator nadrzędny dla wszystkich obrazów utworzonych po obrazie, o którym mowa, za pomocą następujących elementów:
Powinieneś być w stanie spojrzeć na zdjęcia z macierzystej id zaczynających się f50f9524513f, a następnie szukać zdjęć potomnych tych , itp .. Ale
.Parent
nie jest to, co myślisz. , więc w większości przypadków będziesz musiał określićdocker images --all
powyżej, aby to zadziałało, wtedy otrzymasz również identyfikatory obrazów dla wszystkich warstw pośrednich.Oto bardziej ograniczony skrypt Python3, który analizuje dane wyjściowe dockera i przeprowadza wyszukiwanie w celu wygenerowania listy obrazów:
Jeśli zapiszesz to, ponieważ
desc.py
możesz wywołać to w następujący sposób:Lub po prostu skorzystaj z powyższego streszczenia , co robi to samo.
źródło
Jeśli nie masz dużej liczby obrazów, zawsze istnieje podejście brutalnej siły:
źródło
echo $1
brzydsze (ale nadal brutalne)docker images | grep $i
(bardziej przenośne w wersjach dockerowych niż używanie--filter
flag dla identyfikatora obrazu)Zainstaluj dockviz i podążaj za gałęziami z identyfikatora obrazu w widoku drzewa:
źródło
sudo apt-get update ; sudo apt-get install golang-go; export GOPATH=$HOME/.go
najpierw.brew install dockviz
Stworzyłem sedno ze skryptem powłoki, aby wydrukować drzewo potomne obrazu dockera, gdyby ktoś był zainteresowany rozwiązaniem bash:
źródło
To właśnie zrobiłem, aby zachować mój ostateczny „obraz” (tak naprawdę warstwa - co mnie zrzuciło, ponieważ właśnie zaczynam wchodzić w kompilacje Dockera).
Otrzymałem całą wiadomość „… nie można zmusić…”. Zdałem sobie sprawę, że nie mogę usunąć obrazów, których nie potrzebowałem, ponieważ nie są one tak naprawdę niezależnymi obrazami utworzonymi przez „docker commit”. Mój problem polegał na tym, że miałem kilka obrazów (lub warstw) między obrazem podstawowym a moim końcowym, a po prostu próbując wyczyścić, napotkałem błąd / ostrzeżenie dotyczące dziecka i rodzica.
docker image load -i FinalImage.tar.gz
. Wynik wyglądał mniej więcej tak:Identyfikator wczytanego obrazu: sha256: 82d4f8ef9ea1eab72d989455728762ed3c0fe35fd85acf9edc47b41dacfd6382
Teraz, kiedy wypisuję jako „docker image ls”, mam tylko oryginalny obraz podstawowy, a ostateczny obraz, który wcześniej zapisałem w archiwum.
Mój system jest teraz „czysty”. Mam tylko te obrazy, które chcę. Nawet usunąłem obraz podstawowy bez problemu.
źródło
Opierając się na odpowiedziach Slushy i Michaela Hoffmana , jeśli nie masz wielu obrazów, możesz użyć tej funkcji powłoki:
a następnie nazwij to używając
źródło
Oto rozwiązanie oparte na Python API (
pip install docker
), które rekurencyjnie wyświetla potomków wraz z ich tagami (jeśli istnieją), zwiększając wcięcie zgodnie z głębokością relacji (dzieci, wnuki itp.):Przykład:
Udostępniłem go jako podsumowanie na https://gist.github.com/simleo/10ad923f9d8a2fa410f7ec2d7e96ad57
źródło
Oto prosty sposób na uzyskanie listy obrazów podrzędnych zależnych od obrazu nadrzędnego:
Spowoduje to wygenerowanie listy identyfikatorów obrazów podrzędnych / nadrzędnych, na przykład (skrócone dla zwięzłości):
Lewa strona to identyfikator obrazu podrzędnego, prawa strona to identyfikator obrazu nadrzędnego, który próbujemy usunąć, ale mówi, że „obraz ma zależne obrazy podrzędne”. To mówi nam, że
abcdefghijkl
to dziecko jest zależne123456789012
. Więc najpierw musimydocker rmi abcdefghijkl
, a potem możeszdocker rmi 123456789012
.Teraz może istnieć łańcuch zależnych obrazów dzieci, więc być może będziesz musiał powtarzać, aby znaleźć ostatnie dziecko.
źródło
Obrazy platformy Docker można usuwać niezależnie od relacji nadrzędnej i podrzędnej za pośrednictwem poniższego katalogu platformy Docker
W tym katalogu możesz znaleźć obrazy Dockera, dzięki czemu możesz usunąć to, co chcesz.
źródło
/var/lib/docker
Co powiesz na:
Wyświetli identyfikator obrazu podrzędnego z
sha256:
przedrostkiem.Miałem też następujące, które dołączają nazwy:
ID=
Pobiera pełny identyfikator obrazuIMAGES=
Pobiera wszystkie obrazy podrzędne, które mają ten obraz wymieniony jako plikImage
echo...
Usuwa duplikaty i wyświetla wynikiźródło
Przygotowałem to, aby rekurencyjnie znaleźć dzieci, ich tagi repozytorium i wydrukować to, co robią:
Nie zapomnij usunąć / tmp / dii- *, jeśli twój host nie jest bezpieczny.
źródło
Miałem też ten sam problem. Poniższe kroki rozwiązują problem.
Zatrzymaj wszystkie uruchomione kontenery
docker stop $ (docker ps -aq) Usuń wszystkie kontenery
docker rm $ (docker ps -aq) Usuń wszystkie obrazy
docker rmi $ (obrazy docker -q)
źródło