Docker usuwa obrazy TAG <brak>

139
root@server:~# docker images -a        
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>                  <none>              5e2dfc857e73        5 days ago          261.6 MB
<none>                  <none>              d053e988f23d        5 days ago          261.6 MB
<none>                  <none>              1d5d4a2d89eb        5 days ago          261.6 MB
<none>                  <none>              ea0d189fdb19        5 days ago          100.5 MB
<none>                  <none>              26c6175962b3        5 days ago          100.5 MB
<none>                  <none>              73d5cec4a0b3        5 days ago          100.5 MB
<none>                  <none>              e19590e1bac1        5 days ago          100.5 MB

Wypróbowałem następujące:

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

Oraz następujące:

docker rmi $(docker images -f "dangling=true" -q)

Uzyskaj następujący błąd:

docker: "rmi" requires a minimum of 1 argument.
See 'docker rmi --help'.

Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]

Remove one or more images
K - Toksyczność SO rośnie.
źródło
Trochę za późno, ale muszę dodać ten komentarz dla innych użytkowników. Jeśli używasz wiersza polecenia systemu Windows, to nie zadziała. Ponieważ wiersz polecenia nie obsługuje funkcji wewnętrznych. Wypróbuj dokładne wiersze w programie Windows PowerShell
er-han
1
docker rmi $(docker images -a | grep "^<none>" | awk '{print $3}')
Ondra Žižka
docker rmi $(docker images | grep "<none>" | awk "{print $3}")
David
5
docker rmi $(docker images -f dangling=true -q)
Jinna Balu
@Karl Morrison: Już prawie byłeś: właśnie przegapiłem -a (--all) w docker images:)
mirekphd

Odpowiedzi:

203

Możesz spróbować wyświetlić tylko nieoznakowane obrazy (bez etykiet lub z etykietą bez tagu):

docker images -q -a | xargs docker inspect --format='{{.Id}}{{range $rt := .RepoTags}} {{$rt}} {{end}}'|grep -v ':'

Jednak niektóre z tych nieoznakowanych obrazów mogą być potrzebne innym.

Wolę usuwać tylko wiszące obrazy :

docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

Jak wspomniałem dla docker 1.13+ we wrześniu 2016 r. W sekcji „ Jak usunąć stare i nieużywane obrazy Dockera ”, możesz również wykonać image prunepolecenie :

docker image prune

Biorąc to pod uwagę, Janaka Bandara wspomina w komentarzach :

To było nie zdejmować <none>-tagged obrazów dla mnie (np foo/bar:<none>); Musiałem użyć docker images --digestsidocker rmi foo/bar@<digest>

Janaka odnosi się do „ Jak usunąć podpisany obraz ze znacznikiemPaula V. Novarese :

# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
pvnovarese/mprime        latest              459769dbc7a1        5 days ago          4.461 MB
pvnovarese/mprime        <none>              459769dbc7a1        5 days ago          4.461 MB

Kroki diagnostyczne

Możesz zobaczyć różnicę w tych dwóch wpisach, jeśli użyjesz --digests=trueopcji (nieotagowany wpis ma skrót podpisu Docker Content Trust):

# docker images --digests=true
REPOSITORY               TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
pvnovarese/mprime        latest              <none>                                                                    459769dbc7a1        5 days ago          4.461 MB
pvnovarese/mprime        <none>              sha256:0b315a681a6b9f14f93ab34f3c744fd547bda30a03b55263d93861671fa33b00   459769dbc7a1        5 days ago     

Zauważ, że Paweł wspomina również o numerze 18892 Moby :

Po ściągnięciu podpisanego obrazu na wyjściu <none>docker images” pojawia się „dodatkowy” wpis (z tagiem ) .
Utrudnia to rmiobraz (musisz go wymusić, albo najpierw usuń odpowiednio oznaczony wpis lub usuń przez skrót.

VonC
źródło
6
Nie <none>usunęło to dla mnie obrazów z tagami (np. foo/bar:<none>); Musiałem użyć docker images --digestsi docker rmi foo/bar@<digest>zgodnie z opisem na success.docker.com/KBase/…
Janaka Bandara
1
@JanakaBandara Dziękuję. W odpowiedzi zawarłem Twój komentarz (z dodatkowymi linkami)
VonC
dla mniesudo docker rmi $(docker images --filter "dangling=true" -q --no-trunc) Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.35/images/json?filters=%7B%22dangling%22%3A%7B%22true%22%3Atrue%7D%7D: dial unix /var/run/docker.sock: connect: permission denied "docker rmi" requires at least 1 argument. See 'docker rmi --help'. Usage: docker rmi [OPTIONS] IMAGE [IMAGE...] [flags] Remove one or more images
Jamie Hutber,
@JamieHutber "docker rmi" wymaga co najmniej 1 argumentu. To sugeruje, że obrazy dockera --filter "dangling = true" -q --no-trunc nic nie zwraca, co oznacza, że ​​nie ma żadnych wiszących obrazów?
VonC,
Dzięki, VonC, tak naprawdę nie jesthutber@hutber-blade /var/www/dockerfile-wizard $ sudo docker images --filter "dangling=true" -q --no-trunc sha256:c58f4e4b10b1f862d78f96e90bdf13ffe37993279d0992be46d5c15dad51421e sha256:db28e821bc3f337caf711a664bc529be5db8894dd73c5b013ad814cc1e9fc21b sha256:257936750a7d43ae77c713c2cb18342be935de7d3b8fad23d6664fc64acfe753 sha256:6b815cefeb527885b2b9dd831f7f40b05942f00d1367274833a6274154d8ce43
Jamie Hutber
43
docker images | grep none | awk '{ print $3; }' | xargs docker rmi

Możesz spróbować tego po prostu

tansadio
źródło
1
Najszybsze i najłatwiejsze rozwiązanie dla mnie
Mark
Muszę dodać --forcena końcu. Więc polecenie będzie wyglądać tak - docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Munim Dibosh
6

Możesz iść docker rmi $(docker images -f "dangling=true" -q). Więcej opcji można znaleźć w dokumentacji obrazów .

$ docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
<none>                      <none>              94870cda569b        4 seconds ago       673MB
python                      2.7                 320a06f42b5f        10 days ago         673MB
mysql                       latest              e799c7f9ae9c        2 months ago        407MB
gcavalcante8808/semaphore   latest              86e863e11461        2 months ago        537MB
redis                       latest              e32ef7250bc1        2 months ago        184MB
rabbitmq                    3.6.9-management    7e69e14cc496        2 months ago        179MB
rabbitmq                    3.6.9               eb2e4968538a        2 months ago        179MB
jordan/rundeck              latest              6d40b57b1572        2 months ago        660MB
rabbitmq                    3.5.6-management    dbfe8d18809a        19 months ago       304MB

$ docker rmi $(docker images --format '{{.ID}}' --filter=dangling=true)
Deleted: sha256:94870cda569b8cf5f42be25af107d464c993b4502a1472c1679bf2d213b6c0a6
GHETTO.CHiLD
źródło
5

Zgodnie z dokumentacją dockera możesz wyświetlić tylko nieoznakowane (wiszące) obrazy z

$ docker images -f "dangling=true"

i przekieruj ich na docker rmitakie polecenie:

$ docker rmi $(docker images -f "dangling=true" -q) --force

Zwróć uwagę, że -qparametr pokazuje tylko numeryczne identyfikatory kontenerów.

OzzyCzech
źródło
1
Czy nie jest to podobne do tego, co zaproponowałem w mojej odpowiedzi w 2015 roku?
VonC,
5

Możesz sprawdzić, czy „wiszący” filtr przestał działać

$ docker images -f “dangling=true” -q
Error response from daemon: Invalid filter 'dangling'

Użyj czyszczenia systemu Docker, aby usunąć wiszące obrazy

$ docker system prune
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all dangling build cache
Are you sure you want to continue? [y/N]

Możesz użyć, --forceaby nie pytać o potwierdzenie

$ docker system prune --force
Chetabahana
źródło
5

Po prostu uruchom to polecenie:

docker image prune --filter="dangling=true"
Ragnar
źródło
4

Znalazłem docker image prune -fnajbardziej użyteczne i używam go cały czas podczas mojej codziennej pracy, za pomocą znacznika -fnie poprosi o potwierdzenie. Więcej szczegółów tutaj

justjais
źródło
3

Usuń obrazy, które mają nonejako nazwę repozytorium, używając:

docker rmi $(docker images | grep "^<none" | awk '{print $3}')

Usuń obrazy, które mają nonenazwę tagu lub repozytorium:

docker rmi $(docker images | grep "none" | awk '{print $3}')
Jerome Anthony
źródło
3
docker rmi --force $(docker images -q --filter "dangling=true")
Rafaf Tahsin
źródło
2

docker system prune załatwi sprawę, usuwa

- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache

Ale używaj go, zachowując ostrożność!

Rajath
źródło
2

Aby usunąć wszystkie obrazy, nonemusimy mieć pewność, że usunęliśmy wszystkie zatrzymane kontenery, których mogą używać:

docker rm $(docker ps -a -q)

wtedy możemy usunąć wszystkie obrazy:

docker image prune
yevgeniy
źródło
1

Poniższe polecenie działa dla mnie. to są po prostu "" proste obrazy grep, które pobierają identyfikator obrazu Dockera i usuwają wszystkie obrazy. Proste pojedyncze polecenie, jak to konieczne.

docker rmi $(docker images |grep "<none>"| awk '{print $3}')

Jogendra Kumar
źródło
1

To jest rozszerzenie odpowiedzi tansadio:

Jeśli otrzymujesz następujący błąd:

Error response from daemon: conflict: unable to delete <> (must be forced) - image is being used by stopped container <>

Możesz to wymusić --force:

docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Vishrant
źródło
1

Następujące spowoduje usunięcie wszystkich <none>obrazów

docker rmi $(docker images | grep none | awk '{print $3}')

Możesz wymusić usunięcie, zmieniając docker rmina, docker rmi -fchociaż nie polecam tego robić.

Niektóre <none>obrazy mogą być powiązane z innymi obrazami, więc dla bezpieczeństwa nie używaj -ftagów.

nPcomp
źródło
0

To proste i jasne,

Nawet ja potrzebowałem 3 dni, aby zrozumieć ten prosty i wyraźny błąd.

Obraz dockera nie został pomyślnie utworzony

Step 7/13 : COPY jupyter_notebook_config.py /root/.jupyter/
 ---> bf29ce6fe6dc
Step 8/13 : COPY notebooks /notebooks
COPY failed: stat /var/lib/docker/tmp/docker-builder776981166/notebooks: no such file or directory
anarchist@anarchist-desktop:~/Documents/sam/dockerDem$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              bf29ce6fe6dc        9 seconds ago       1.27GB
ubuntu              16.04               a51debf7e1eb        3 weeks ago         116MB

Następnie usunąłem 8. linię z Dockerfile, tym razem był to sygnał sukcesu.

Successfully built b6724370f8ca
Successfully tagged dem:expo
anarchist@anarchist-desktop:~/Documents/sam/dockerDem$ docker run -it -p 8888:8888 dem:expo
[I 06:11:38.984 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 06:11:39.011 NotebookApp] Serving notebooks from local directory: /
[I 06:11:39.011 NotebookApp] The Jupyter Notebook is running at:
[I 06:11:39.011 NotebookApp] http://(296d81166725 or 127.0.0.1):8888/?token=496feb282ef749c05277ef57a51e8a56fedb1c6b337b9f92

Mówi, że pomyślnie otagowano dem: expo, ta linia jest imp podczas procesu dokowania.

Egzorcysta
źródło
0

docker rmi -f $ (obrazy dockera -a | awk 'NR> 1 && $ 2 == "" {print $ 3}')

iamfaith
źródło
0

Wszystko

Udostępnianie polecenia PowerShell dla miłośników Windows (na wypadek, gdybyś nie miał bash, grep lub awk)

(docker images) -like '*<none>*' | ForEach-Object { 
  $imageid=($_ -split "\s+")[2]
  docker rmi -f $imageid
}
Jhony Polanía
źródło
0

Uruchom następujące polecenie, aby usunąć obrazy za pomocą docker rmi

docker images --filter "dangling=true"      
Jatinder Dhaliwal
źródło
0

Usuń wszystkie opuszczone pojemniki

docker rm $(docker container ls -a -f status=exited -q)

lub wyjmij pojemniki według wzoru

docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
Elton Sandré
źródło
0

spróbuj tego, aby zobaczyć listę ID obrazów dockera z tagiem <none>

docker images -a | awk '/^<none>/ {print $3}'

a następnie możesz usunąć wszystkie obrazy z tagiem <none>. to działało dla mnie.

docker rmi $(docker images -a | awk '/^<none>/ {print $3}')
nur zazin
źródło
0

100% działa: obrazy dockera | grep none | awk '{print $ 3}' | xargs docker rmi -f

sudhir tataraju
źródło
-1

próbować

docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "<none>" {print $3}') , podczas gdy mogą istnieć czystsze polecenia

Zaktualizowano

user2915097
źródło
1
Spowoduje to również usunięcie obrazów, które nie są oznaczone jako <none>, co jest dużym nono.
K - Toksyczność SO rośnie.
Zaktualizowałem odpowiedź
user2915097,
Polecenie docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "" {print $3}nic nie robi!
K - Toksyczność SO rośnie.
-1

Po prostu usuń obrazy, używając ich identyfikatorów:

# docker rmi 5e2dfc857e73 d053e988f23d ...
Daniel Borges
źródło
-2

Wiszące obrazy to duchy z poprzednich kompilacji i ściągnięć, po prostu usuń je za pomocą: docker rmi $ (docker images -f "dangling = true" -q)

Nathan Borik
źródło
OP stwierdza, że ​​próbował już tego samego polecenia, ale nie udało się. Również ta odpowiedź została udzielona już co najmniej dwukrotnie.
CaringDev
-5
docker rmi $(docker images -a -q)

Podano następujące obrazy, w których są używane. Myślę, że to polecenie usuwa niechciane obrazy.

K - Toksyczność SO rośnie.
źródło
2
czy to nie usuwa wszystkich obrazów?
marianobianchi
3
spowoduje to usunięcie wszystkich nieużywanych obrazów i nie powinno być oznaczane jako poprawna odpowiedź.
Ghashange,