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
K - Toksisitas pada SO meningkat.
sumber
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.

VonC
sumber
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

tansadio
sumber
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
23

pemangkasan gambar buruh pelabuhan menghapus semua gambar yang menjuntai (yang tidak memiliki tag). buruh pelabuhan pemangkasan gambar -a juga akan menghapus semua gambar yang tidak memiliki wadah yang menggunakannya.

Perbedaan antara gambar yang menggantung dan tidak digunakan dijelaskan di utas stackoverflow ini .

herm
sumber
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
GHETTO.CHiLD
sumber
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.

OzzyCzech
sumber
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
Chetabahana
sumber
5

Jalankan saja perintah ini:

docker image prune --filter="dangling=true"
Ragnar
sumber
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

justjais
sumber
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}')
Jerome Anthony
sumber
3
docker rmi --force $(docker images -q --filter "dangling=true")
Rafaf Tahsin
sumber
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!

Rajath
sumber
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
yevgeniy
sumber
1

Untuk menghilangkan gambar yang menjuntai silahkan gunakan:

docker image rm $(docker images --format "{{.ID}}" --filter "dangling=true")

Silakan lihat jawaban saya di sini untuk penjelasan yang lebih rinci: https://unix.stackexchange.com/a/445664/292327

Aditya Satyavada
sumber
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}')

Jogendra Kumar
sumber
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
Vishrant
sumber
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.

nPcomp
sumber
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.

Pengusir setan
sumber
0

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

iamfaith
sumber
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
}
Jhony Polanía
sumber
0

Jalankan perintah berikut untuk menghapus gambar dengan docker rmi

docker images --filter "dangling=true"      
Jatinder Dhaliwal
sumber
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
Elton Sandré
sumber
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}')
nur zazin
sumber
0

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

sudhir tataraju
sumber
-1

mencoba

docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "<none>" {print $3}') , sementara mungkin ada perintah yang lebih bersih

Diperbarui

pengguna2915097
sumber
1
Itu juga akan menghapus gambar yang tidak diberi tag <none> yang merupakan nono besar.
K - Toksisitas pada SO meningkat.
Saya telah meningkatkan jawaban saya
pengguna2915097
Perintah docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "" {print $3}tidak melakukan apapun!
K - Toksisitas pada SO meningkat.
-1

Hapus saja gambar menggunakan ID mereka:

# docker rmi 5e2dfc857e73 d053e988f23d ...
Daniel Borges
sumber
-2

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

Nathan Borik
sumber
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.

K - Toksisitas pada SO meningkat.
sumber
2
bukankah ini menghapus semua gambar?
marianobianchi
3
ini menghapus semua gambar yang tidak digunakan dan seharusnya tidak ditandai sebagai jawaban yang benar.
Ghashange