Docker menghapus gambar TAG <none>


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

Saya sudah mencoba yang berikut ini:

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

Dan berikut ini:

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

Dapatkan kesalahan berikut:

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

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

Remove one or more images

Agak terlambat tapi saya harus menambahkan komentar ini untuk pengguna lain. Jika Anda menggunakan Command Prompt Windows, ini tidak akan berhasil. Karena Command Prompt tidak mendukung fungsi dalam. Coba baris yang sama persis dengan 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: Anda hampir sampai: baru saja melewatkan -a (--semua) di docker images:)
mirekphd

Jawaban:


202

Anda dapat mencoba dan mencantumkan hanya gambar yang tidak diberi tag (gambar tanpa label, atau dengan label tanpa tag):

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

Namun, beberapa dari gambar yang tidak diberi tag itu mungkin dibutuhkan oleh orang lain.

Saya lebih suka menghapus hanya gambar yang menjuntai :

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

Seperti yang saya sebutkan untuk untuk buruh pelabuhan 1.13+ pada September 2016 di " Cara menghapus gambar Docker lama dan tidak terpakai ", Anda juga dapat melakukan image pruneperintah :

docker image prune

Karena itu, Janaka Bandara menyebutkan dalam komentarnya :

Ini tidak menghapus <none>gambar bertanda untuk saya (mis. foo/bar:<none>); Saya harus menggunakan docker images --digestsdandocker rmi foo/bar@<digest>

Janaka merujuk pada " Bagaimana Menghapus Gambar Bertanda Tangan dengan Tag " dari 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

Langkah Diagnostik

Anda dapat melihat perbedaan dalam dua entri ini jika Anda menggunakan --digests=trueopsi (entri tanpa tag memiliki intisari tanda tangan 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     

Perhatikan bahwa Paul juga menyebutkan masalah moby 18892 :

Setelah menarik gambar yang ditandatangani, ada entri "ekstra" (dengan tag <none>) dalam docker imageskeluaran " ".
Hal ini menyulitkan rmigambar (Anda harus memaksanya, atau terlebih dahulu hapus entri yang diberi tag dengan benar, atau hapus dengan intisari.


6
Ini tidak menghapus <none>gambar bertanda untuk saya (mis. foo/bar:<none>); Saya harus menggunakan docker images --digestsdan docker rmi foo/bar@<digest>seperti yang dijelaskan di success.docker.com/KBase/…
Janaka Bandara

1
@JanakaBandara Terima kasih. Saya telah memasukkan komentar Anda dalam jawaban (dengan beberapa tautan tambahan)
VonC

untuk sayasudo 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 "buruh pelabuhan rmi" membutuhkan setidaknya 1 argumen. Itu menyarankan gambar buruh pelabuhan --filter "dangling = true" -q --no-trunc tidak mengembalikan apa-apa, artinya tidak ada gambar yang menjuntai?
VonC

Terima kasih VonC sebenarnya tidakhutber@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

Anda dapat mencobanya dengan mudah


1
Solusi tercepat dan termudah bagi saya
Tandai

Harus menambahkan --forcedi akhir. Jadi perintahnya akan terlihat seperti- docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Munim Dibosh


6

Kamu boleh pergi docker rmi $(docker images -f "dangling=true" -q). Lihat dokumentasi gambar untuk opsi lebih lanjut.

$ 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

Menurut dokumentasi buruh pelabuhan Anda hanya dapat mencantumkan gambar yang tidak diberi tag (menggantung) dengan

$ docker images -f "dangling=true"

dan mengarahkan mereka ke docker rmiperintah seperti itu:

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

Perhatikan -qparam thats hanya menampilkan ID numerik kontainer.


1
Bukankah ini serupa dengan yang saya usulkan dalam jawaban saya di tahun 2015?
VonC

5

Anda dapat memeriksa apakah filter 'menjuntai' tidak lagi berfungsi

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

Gunakan pemangkasan sistem buruh pelabuhan untuk menghapus gambar yang menjuntai

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

Anda dapat menggunakan --forceuntuk tidak meminta konfirmasi

$ docker system prune --force

5

Jalankan saja perintah ini:

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

4

Saya telah menemukan yang docker image prune -fpaling berguna dan saya menggunakannya sepanjang waktu selama saya bekerja sehari-hari, menggunakan tag -ftidak akan meminta konfirmasi. Lebih lengkapnya di sini


3

Hapus gambar yang memiliki nonenama repositori menggunakan yang berikut ini:

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

Hapus gambar yang memiliki nonetag atau nama repositori:

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


2

docker system prune akan melakukan trik, itu menghapus

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

Tapi gunakanlah, dengan hati-hati!


2

Untuk menghapus semua gambar dengan nonekami harus yakin bahwa kami menghapus semua kontainer yang dihentikan yang dapat mereka gunakan berjalan:

docker rm $(docker ps -a -q)

maka kami dapat menghapus semua gambar:

docker image prune


1

Perintah di bawah ini berfungsi untuk saya. ini hanya gambar grep "" sederhana dan dapatkan id gambar buruh pelabuhan dan hapus semua gambar. Perintah tunggal sederhana karena harus.

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


1

Ini adalah perpanjangan dari jawaban tansadio:

Jika Anda mendapatkan kesalahan berikut:

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

Anda bisa memaksanya dengan --force:

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

1

Mengikuti akan menghapus semua <none>gambar

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

Anda dapat memaksa penghapusan dengan mengubah docker rmike docker rmi -fmeskipun saya tidak menyarankan melakukan itu.

Beberapa <none>gambar bisa saja terkait dengan gambar lain jadi untuk amannya jangan gunakan -ftag.


0

Sederhana dan jelas,

Bahkan saya membutuhkan waktu 3 hari untuk memahami kesalahan sederhana dan jelas ini.

Gambar buruh pelabuhan tidak berhasil dibuat

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

Kemudian saya menghapus baris ke-8 dari Dockerfile, kali ini sinyal berhasil.

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

Dikatakan berhasil menandai dem: expo, baris ini adalah imp selama proses buruh pelabuhan.


0

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


0

Semua

Berbagi perintah PowerShell untuk pecinta windows (kalau-kalau Anda tidak memiliki bash, grep atau awk)

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


0

Hapus semua kontainer yang sudah keluar

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

atau pindahkan wadah sesuai dengan pola

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

0

coba ini untuk melihat daftar gambar buruh pelabuhan ID dengan tag <none>

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

dan kemudian Anda dapat menghapus semua gambar dengan tag <none>. ini berhasil untuk saya.

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

0

100% berfungsi: gambar buruh pelabuhan | grep tidak ada | awk '{print $ 3}' | xargs docker rmi -f



-1

Hapus saja gambar menggunakan ID mereka:

# docker rmi 5e2dfc857e73 d053e988f23d ...

-2

Gambar yang menjuntai adalah ghost dari build dan pull sebelumnya, cukup hapus dengan: docker rmi $ (docker images -f "dangling = true" -q)


OP menyatakan bahwa dia sudah mencoba perintah yang tepat ini tetapi gagal. Juga, jawaban ini telah diberikan setidaknya dua kali.
CaringDev

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

Menyatakan gambar berikut di mana digunakan. Saya pikir perintah ini menghilangkan gambar yang tidak diinginkan.


2
bukankah ini menghapus semua gambar?
marianobianchi

3
ini menghapus semua gambar yang tidak digunakan dan seharusnya tidak ditandai sebagai jawaban yang benar.
Ghashange
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.