Docker ลบ <none> TAG ภาพ


142
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

ฉันได้ลองสิ่งต่อไปนี้:

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

และสิ่งต่อไปนี้:

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

รับข้อผิดพลาดต่อไปนี้:

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

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

Remove one or more images

มันช้าไปหน่อย แต่ฉันต้องเพิ่มความคิดเห็นนี้สำหรับผู้ใช้คนอื่น หากคุณใช้พรอมต์คำสั่งของ Windows สิ่งนี้จะไม่ได้ผล เนื่องจากพรอมต์คำสั่งไม่รองรับฟังก์ชันภายใน ลองใช้ 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}")
เดวิด

5
docker rmi $(docker images -f dangling=true -q)
Jinna Balu

@Karl Morrison: คุณเกือบจะอยู่ที่นั่นแล้ว: เพิ่งพลาด -a (- ทั้งหมด) ในdocker images:)
mirekphd

คำตอบ:


205

คุณสามารถลองและแสดงรายการเฉพาะภาพที่ไม่มีป้ายกำกับ (ภาพที่ไม่มีป้ายกำกับหรือมีป้ายกำกับที่ไม่มีแท็ก):

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

อย่างไรก็ตามภาพที่ไม่ติดแท็กบางภาพอาจจำเป็นสำหรับผู้อื่น

ฉันชอบลบเฉพาะภาพห้อย :

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

ดังที่ฉันพูดถึงสำหรับนักเทียบท่า 1.13+ ในเดือนกันยายน 2016 ใน " วิธีลบอิมเมจ Docker เก่าและที่ไม่ได้ใช้ " คุณยังสามารถทำตามimage pruneคำสั่ง :

docker image prune

ดังที่กล่าวไว้Janaka Bandaraกล่าวถึงในความคิดเห็น :

นี่ไม่ได้ลบ<none>ภาพที่ติดแท็กให้ฉัน (เช่นfoo/bar:<none>); ฉันต้องใช้docker images --digestsและdocker rmi foo/bar@<digest>

Janaka อ้างอิง " วิธีลบภาพที่มีป้ายพร้อมแท็ก " จาก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

ขั้นตอนการวินิจฉัย

คุณสามารถเห็นความแตกต่างในสองรายการนี้ได้หากคุณใช้--digests=trueตัวเลือก (รายการที่ไม่ได้ติดแท็กมีส่วนย่อยลายเซ็นของ 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     

โปรดทราบว่า Paul ยังกล่าวถึงปัญหา moby 18892 :

หลังจากดึงภาพที่เซ็นชื่อแล้วจะมีรายการ "พิเศษ" (พร้อมแท็ก<none>) ในdocker imagesเอาต์พุต ""
สิ่งนี้ทำให้rmiภาพยาก(คุณต้องบังคับหรือไม่ก็ลบรายการที่ติดแท็กอย่างถูกต้องก่อนหรือลบโดยไดเจสต์


6
นี่ไม่ได้ลบ<none>ภาพที่ติดแท็กให้ฉัน (เช่นfoo/bar:<none>); ฉันต้องใช้docker images --digestsและdocker rmi foo/bar@<digest>ตามที่อธิบายไว้ที่success.docker.com/KBase/…
Janaka Bandara

1
@JanakaBandara ขอบคุณค่ะ ฉันได้รวมความคิดเห็นของคุณไว้ในคำตอบแล้ว (พร้อมลิงก์เพิ่มเติม)
VonC

สำหรับฉันsudo 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" ต้องการอาร์กิวเมนต์อย่างน้อย 1 รายการ ที่แนะนำภาพนักเทียบท่า - กรอง "dangling = true" -q --no-trunc ไม่คืนค่าอะไรเลยหมายความว่าไม่มีภาพห้อย?
VonC

ขอบคุณ VonC จริง ๆ มันไม่ได้hutber@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

คุณสามารถลองทำได้ง่ายๆ


1
วิธีแก้ปัญหาที่เร็วและง่ายที่สุดสำหรับฉัน
มาระโก

ต้องเพิ่ม--forceตอนท้าย. ดังนั้นคำสั่งจะมีลักษณะดังนี้ - docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Munim Dibosh

23

การตัดแต่งรูปนักเทียบท่าจะลบภาพห้อยทั้งหมด (ที่ไม่มีแท็ก) นักเทียบท่ารูปภาพพรุน -a จะลบภาพใด ๆ ที่ไม่มีคอนเทนเนอร์ที่ใช้

ความแตกต่างระหว่างภาพห้อยและภาพที่ไม่ได้ใช้มีอธิบายไว้ในเธรด stackoverflowนี้


6

docker rmi $(docker images -f "dangling=true" -q)คุณสามารถไปที่ ดูเอกสารประกอบรูปภาพสำหรับตัวเลือกเพิ่มเติม

$ 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

ตามเอกสารของนักเทียบท่าคุณสามารถแสดงเฉพาะภาพที่ไม่ได้ติดแท็ก (ห้อย) ด้วย

$ docker images -f "dangling=true"

และเปลี่ยนเส้นทางไปยังdocker rmiคำสั่งเช่นนั้น:

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

สังเกตว่า-qพารามิเตอร์แสดงเฉพาะรหัสตัวเลขของคอนเทนเนอร์


1
มันไม่เหมือนกับที่ฉันเสนอไว้ในคำตอบของฉันในปี 2015 หรือไม่?
VonC

5

คุณสามารถตรวจสอบว่าตัวกรอง "ห้อย" ไม่ทำงานอีกต่อไปหรือไม่

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

ใช้ระบบนักเทียบท่าเพื่อลบภาพที่ห้อยออก

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

คุณอาจใช้--forceเพื่อไม่แจ้งให้ยืนยัน

$ docker system prune --force


4

ฉันพบว่าdocker image prune -fมีประโยชน์มากที่สุดและฉันใช้มันตลอดเวลาในระหว่างการทำงานในแต่ละวันการใช้แท็ก-fจะไม่แจ้งให้ยืนยัน รายละเอียดเพิ่มเติมที่นี่


3

ลบอิมเมจที่มีnoneเป็นชื่อที่เก็บโดยใช้สิ่งต่อไปนี้:

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

ลบภาพที่มีnoneแท็กหรือชื่อที่เก็บ:

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


2

docker system prune จะทำเคล็ดลับก็ลบออก

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

แต่ใช้ด้วยความระมัดระวัง!


2

ในการลบภาพทั้งหมดด้วยnoneเราต้องแน่ใจว่าเราได้ลบคอนเทนเนอร์ที่หยุดทั้งหมดซึ่งสามารถใช้งานได้:

docker rm $(docker ps -a -q)

จากนั้นเราสามารถลบภาพทั้งหมด:

docker image prune


1

คำสั่งด้านล่างใช้งานได้สำหรับฉัน นี่เป็นเพียงภาพ grep "" ธรรมดา ๆ และรับ id ภาพนักเทียบท่าและลบภาพทั้งหมด คำสั่งเดียวที่เรียบง่ายตามที่จำเป็น

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


1

นี่คือส่วนขยายของคำตอบของ tansadio:

หากคุณได้รับข้อผิดพลาดต่อไปนี้:

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

คุณสามารถบังคับได้ด้วย--force:

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

1

ต่อไปนี้จะลบ<none>ภาพทั้งหมด

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

คุณสามารถบังคับให้นำออกได้โดยเปลี่ยนdocker rmiเป็นdocker rmi -fแม้ว่าฉันไม่แนะนำให้ทำเช่นนั้นก็ตาม

บาง<none>ภาพอาจเกี่ยวข้องกับภาพอื่น ๆ เพื่อความปลอดภัยอย่าใช้-fแท็ก



0

เรียบง่ายและชัดเจน

แม้ฉันจะใช้เวลา 3 วันในการทำความเข้าใจข้อผิดพลาดที่เรียบง่ายและชัดเจนนี้

สร้างอิมเมจนักเทียบท่าไม่สำเร็จ

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

จากนั้นฉันก็ลบบรรทัดที่ 8 ออกจาก Dockerfile มันเป็นความสำเร็จของสัญญาณในครั้งนี้

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

มันบอกว่าติดแท็ก dem: expo เรียบร้อยแล้วบรรทัดนี้เป็น imp ในระหว่างกระบวนการเทียบท่า



0

ทั้งหมด

การแชร์คำสั่ง PowerShell สำหรับผู้ที่ชื่นชอบ windows (ในกรณีที่คุณไม่มี bash, grep หรือ awk)

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


0

นำคอนเทนเนอร์ที่ออกทั้งหมดออก

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

หรือนำภาชนะออกตามรูปแบบ

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

0

ลองทำเช่นนี้เพื่อดูรายการ ID อิมเมจนักเทียบท่าพร้อมแท็ก <none>

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

<none>และจากนั้นคุณสามารถลบภาพทั้งหมดที่มีแท็ก สิ่งนี้ได้ผลสำหรับฉัน

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

-1

ลอง

docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "<none>" {print $3}') ในขณะที่อาจมีคำสั่งที่สะอาดกว่า

Updated


1
นอกจากนี้ยังจะลบภาพที่ไม่ได้ติดแท็ก <ไม่มี> ซึ่งเป็น nono ขนาดใหญ่
K - ความเป็นพิษใน SO กำลังเพิ่มขึ้น

ฉันได้อัปเดตคำตอบของฉันแล้ว
user2915097

คำสั่งdocker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "" {print $3}ไม่ทำอะไร!
K - ความเป็นพิษใน SO กำลังเพิ่มขึ้น


-2

ภาพห้อยเป็นผีจากการสร้างและดึงก่อนหน้านี้เพียงแค่ลบออกด้วย: นักเทียบท่า rmi $ (ภาพนักเทียบท่า -f "dangling = true" -q)


OP ระบุว่าเขาได้ลองใช้คำสั่งนี้แล้ว แต่ล้มเหลว นอกจากนี้คำตอบนี้ได้รับอย่างน้อยสองครั้งแล้ว
CaringDev

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

ระบุรูปภาพต่อไปนี้ที่ใช้งาน ฉันคิดว่าคำสั่งนี้กำจัดภาพที่ไม่ต้องการออกไป


2
นี่ไม่ลบภาพทั้งหมดเหรอ
marianobianchi

3
วิธีนี้จะลบภาพที่ไม่ได้ใช้ทั้งหมดและไม่ควรทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้อง
Ghashange
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.