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

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.


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


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

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.


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

5

Po prostu uruchom to polecenie:

docker image prune --filter="dangling=true"

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


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}')


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ść!


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


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}')


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

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.


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.


0

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


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
}


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

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}')



-1

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

# docker rmi 5e2dfc857e73 d053e988f23d ...

-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)


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.