Docker entfernt <keine> TAG-Bilder


136
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

Ich habe folgendes versucht:

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

Und die folgende:

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

Erhalten Sie den folgenden Fehler:

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

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

Remove one or more images

Es ist etwas spät, aber ich muss diesen Kommentar für andere Benutzer hinzufügen. Wenn Sie die Windows-Eingabeaufforderung verwenden, funktioniert dies nicht. Weil die Eingabeaufforderung keine inneren Funktionen unterstützt. Versuchen Sie die genauen Linien mit 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: Du warst fast da: habe gerade -a (--all) in verpasst docker images:)
mirekphd

Antworten:


198

Sie können versuchen, nur Bilder ohne Tags aufzulisten (solche ohne Beschriftung oder mit Beschriftung ohne Tag):

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

Einige dieser Bilder ohne Tags werden jedoch möglicherweise von anderen benötigt.

Ich ziehe es vor, nur baumelnde Bilder zu entfernen :

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

Wie ich für Docker 1.13+ im September 2016 unter " Entfernen alter und nicht verwendeter Docker-Images " erwähnt habe, können Sie auch den folgenden image pruneBefehl ausführen :

docker image prune

That being said, Janaka Bandara erwähnt in den Kommentaren :

Das hat nicht entfernen <none>-markierte Bilder für mich (zB foo/bar:<none>); Ich hatte zu verwenden docker images --digestsunddocker rmi foo/bar@<digest>

Janaka verweist auf " So entfernen Sie ein signiertes Bild mit einem Tag " von Paul 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

Diagnoseschritte

Sie können den Unterschied zwischen diesen beiden Einträgen erkennen, wenn Sie die --digests=trueOption verwenden (der Eintrag ohne Tags enthält den Signatur-Digest von 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     

Beachten Sie, dass Paulus auch das Moby-Problem 18892 erwähnt :

Nach dem Abrufen eines signierten Bildes gibt es einen "zusätzlichen" Eintrag (mit Tag <none>) in der " docker images" Ausgabe.
Dies macht es für rmidas Bild schwierig (Sie müssen es erzwingen oder zuerst den ordnungsgemäß markierten Eintrag löschen oder durch Digest löschen.


5
Dies hat <none>für mich keine mit Tags versehenen Bilder entfernt (z. B. foo/bar:<none>). Ich musste docker images --digestsund docker rmi foo/bar@<digest>wie unter success.docker.com/KBase/… beschrieben
Janaka Bandara

1
@ JanakaBandara Danke. Ich habe Ihren Kommentar in die Antwort aufgenommen (mit einigen zusätzlichen Links)
VonC

für michsudo 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" benötigt mindestens 1 Argument. Das deutet darauf hin, dass Docker-Bilder --filter "dangling = true" -q --no-trunc nichts zurückgeben, was bedeutet, dass es keine baumelnden Bilder gibt?
VonC

Danke VonC eigentlich nichthutber@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

42
docker images | grep none | awk '{ print $3; }' | xargs docker rmi

Sie können dies einfach versuchen


1
Schnellste und einfachste Lösung für mich
Mark

Muss --forceam Ende hinzufügen . Der Befehl sieht also so aus: docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Munim Dibosh

22

Docker Image Prune entfernt alle baumelnden Bilder (die mit dem Tag none). Docker Image Prune -a würde auch alle Bilder entfernen, die keinen Container haben, der sie verwendet.

Der Unterschied zwischen baumelnden und nicht verwendeten Bildern wird in diesem Stapelüberlauf-Thread erläutert .


6

Du kannst gehen docker rmi $(docker images -f "dangling=true" -q). Weitere Optionen finden Sie in der Bilddokumentation .

$ 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

Laut Docker-Dokumentation können Sie nur Bilder ohne Tags (baumelnd) mit auflisten

$ docker images -f "dangling=true"

und leite sie um, um so zu docker rmibefehlen:

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

Beachten -qSie, dass Parameter nur numerische IDs von Containern anzeigen.


1
Ist es nicht ähnlich zu dem, was ich 2015 in meiner Antwort vorgeschlagen habe ?
VonC

5

Sie können überprüfen, ob der Filter "baumelt" nicht mehr funktioniert

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

Verwenden Sie die Docker-Systembeschneidung , um die baumelnden Bilder zu entfernen

$ 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]

Sie können verwenden, --forceum nicht zur Bestätigung aufzufordern

$ docker system prune --force

4

Ich habe es als docker image prune -fam nützlichsten empfunden und benutze es die ganze Zeit während meiner täglichen Arbeit. Die Verwendung des Tags -ffordert nicht zur Bestätigung auf. Weitere Details hier


4

Führen Sie einfach diesen Befehl aus:

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

3

Entfernen Sie Bilder mit dem noneNamen des Repositorys wie folgt:

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

Entfernen Sie Bilder mit noneTag- oder Repository-Namen:

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


2

docker system prune wird den Trick machen, es entfernt

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

Aber benutze es mit Vorsicht!


2

Um alle Bilder mit zu entfernen none, müssen wir sicherstellen, dass wir alle gestoppten Container entfernt haben, die sie verwenden können: run:

docker rm $(docker ps -a -q)

dann können wir alle Bilder entfernen:

docker image prune


1

Der folgende Befehl funktioniert für mich. Dies sind nur einfache grep "" - Bilder, die die Docker-Bild-ID abrufen und alle Bilder entfernen. Einfacher Einzelbefehl wie es sein muss.

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


1

Dies ist eine Erweiterung von Tansadios Antwort:

Wenn folgende Fehlermeldung angezeigt wird:

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

Sie können es erzwingen mit --force:

docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force

1

Im Folgenden werden alle <none>Bilder entfernt

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

Sie können das Entfernen erzwingen, indem Sie zu wechseln docker rmi, docker rmi -fobwohl ich dies nicht empfehle.

Einige der <none>Bilder könnten mit anderen Bildern in Beziehung stehen. Verwenden Sie zur Sicherheit kein -fTag.


0

Es ist einfach und klar,

Sogar ich habe 3 Tage gebraucht, um diesen einfachen und knackigen Fehler zu verstehen.

Das Docker-Image wurde nicht erfolgreich erstellt

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

Dann habe ich die 8. Zeile aus Dockerfile entfernt, diesmal war es ein Signalerfolg.

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

Es heißt erfolgreich dem: expo markiert, diese Zeile ist imp während des Docker-Prozesses.


0

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


0

Alles

Freigeben des PowerShell-Befehls für Windows-Liebhaber (nur für den Fall, dass Sie nicht über Bash, Grep oder Awk verfügen)

(docker images) -like '*<none>*' | ForEach-Object { 
  $imageid=($_ -split "\s+")[2]
  docker rmi -f $imageid
}


0

Entfernen Sie alle verlassenen Behälter

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

oder entfernen Sie Behälter nach einem Muster

docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

0

Versuchen Sie dies, um die ID der Listendocker-Bilder mit dem Tag anzuzeigen <none>

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

und dann können Sie alle Bilder mit Tag löschen <none>. das hat bei mir funktioniert.

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

0

100% funktioniert: Docker-Bilder | grep none | awk '{print $ 3}' | xargs docker rmi -f



-1

Entfernen Sie einfach die Bilder mit ihren IDs:

# docker rmi 5e2dfc857e73 d053e988f23d ...

-2

Die baumelnden Bilder sind Geister aus den vorherigen Builds und Pulls. Löschen Sie sie einfach mit: docker rmi $ (docker images -f "dangling = true" -q)


Das OP gibt an, dass er diesen genauen Befehl bereits ausprobiert hat, aber er ist fehlgeschlagen. Auch diese Antwort wurde bereits mindestens zweimal gegeben.
CaringDev

-5
docker rmi $(docker images -a -q)

Die folgenden Bilder wurden verwendet. Ich denke, dieser Befehl entfernt unerwünschte Bilder.


2
Entfernt dies nicht alle Bilder?
Marianobianchi

3
Dadurch werden alle nicht verwendeten Bilder entfernt und es sollte nicht als die richtige Antwort markiert werden.
Ghashange
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.