วิธีการลบอิมเมจ Docker แบบโลคัลทั้งหมด


270

ฉันเพิ่งเริ่มใช้ Docker และไม่เคยรู้ว่าฉันควรใช้docker-compose downแทนctrl-cหรือdocker-compose stopเพื่อกำจัดการทดลองของฉัน ตอนนี้ฉันมีภาพนักเทียบท่าที่ไม่จำเป็นจำนวนมากในเครื่อง

มีธงที่ฉันสามารถเรียกใช้เพื่อลบรูปภาพและคอนเทนเนอร์ของนักเทียบท่าในพื้นที่ได้หรือไม่?

บางอย่างเช่น - docker rmi --all --forceธงทั้งหมดไม่มีอยู่ แต่ฉันกำลังมองหาบางอย่างที่มีแนวคิดคล้ายกัน



2
docker images purge-> จะลบภาพนักเทียบท่าทั้งหมดของคุณออก
muthukumar helius

ด้วย xargs:docker image ls -q | xargs -I {} docker image rm -f {}
arkadyt

@muthukumarhelius ฉันคิดว่าคุณหมายถึงdocker image prune(ภาพเป็นเอกพจน์และมันพรุนแทนที่จะล้างออก)
AndrésMejía

คำตอบ:


539

หากต้องการลบคอนเทนเนอร์ทั้งหมดรวมถึงปริมาณที่ใช้

docker rm -vf $(docker ps -a -q)

ในการลบภาพทั้งหมด

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

จำไว้ว่าคุณควรลบภาชนะทั้งหมดก่อนที่จะลบภาพทั้งหมดที่สร้างภาชนะเหล่านั้น

ในกรณีที่คุณใช้ Windows (Powershell)

$images = docker images -a -q
foreach ($image in $images) { docker image rm $image -f }

7
unknown shorthand flag: 'a' in -aเมื่อทำงานdocker rmi -f $(docker images -a -q)
Ashutosh Chamoli

25
@Ashutosh Chamoli: ไม่ทำงานใน CMD ทำงานใน PowerShell
แจ็ค

4
ตัวแปรหนึ่งบรรทัดสำหรับ PowerShell:docker images -a -q | % { docker image rm $_ -f }
CodeStix

4
ฉันต้องมาที่นี่ 100 ครั้ง ขอบคุณที่เขียนคำตอบนี้!
Ajay Maity

「นักเทียบท่า rmi -f $ (ภาพนักเทียบท่า -a -q)
bad เป็นนักเลงตัว

177

ใช้สิ่งนี้เพื่อลบทุกอย่าง :

docker system prune -a --volumes

ลบคอนเทนเนอร์วอลุ่มเครือข่ายและรูปภาพที่ไม่ได้ใช้ทั้งหมดออก

WARNING! This will remove:
    - all stopped containers
    - all networks not used by at least one container
    - all volumes not used by at least one container
    - all images without at least one container associated to them
    - all build cache

https://docs.docker.com/engine/reference/commandline/system_prune/#extended-description


1
ไม่ได้เรียกคืนพื้นที่ดิสก์ทั้งหมดจริง ๆ
lucian303

@ lucian303 วิธีการนี้จะเรียกคืนพื้นที่ว่างในดิสก์ บางทีคุณกำลังเผชิญกับปัญหาบางอย่าง
Robert

ฉันเท่านั้นที่ดูเหมือนจะได้รับผลที่ต้องการเมื่อฉันทำเช่นนี้และขั้นตอนใน @techtabu 's คำตอบ
sir_dancealot

33

หากต้องการล้างทุกอย่างให้ง่าย:

$ docker system prune --all

ทุกอย่างหมายถึง:

  • ภาชนะที่หยุดทั้งหมด
  • เครือข่ายทั้งหมดไม่ได้ใช้อย่างน้อยหนึ่งคอนเทนเนอร์
  • รูปภาพทั้งหมดที่ไม่มีคอนเทนเนอร์อย่างน้อยหนึ่งคอนเทนเนอร์ที่เกี่ยวข้อง
  • แคชบิลด์ทั้งหมด

26

docker image prune -a

ลบภาพที่ไม่ได้ใช้ทั้งหมดออก เพิ่ม-fตัวเลือกเพื่อบังคับ

รุ่น Local Docker: 17.09.0-ce, Git กระทำ: afdb6d4, OS / Arch: darwin / amd64

$ docker image prune -h
Flag shorthand -h has been deprecated, please use --help

Usage:  docker image prune [OPTIONS]

Remove unused images

Options:
  -a, --all             Remove all unused images, not just dangling ones
      --filter filter   Provide filter values (e.g. 'until=<timestamp>')
  -f, --force           Do not prompt for confirmation
      --help            Print usage

7

คำสั่งที่ง่ายและสะดวก

เพื่อลบภาพทั้งหมด

docker rmi $(docker images -a)

หากต้องการลบคอนเทนเนอร์ที่อยู่ในสถานะออก

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

เพื่อลบคอนเทนเนอร์ที่อยู่ในสถานะที่สร้างขึ้น

docker rm $(docker ps -a -f status=created -q)

หมายเหตุ: นำภาชนะทั้งหมดออกแล้วนำภาพออก


เพื่อลบภาพทั้งหมดควรเป็น - "นักเทียบท่า rmi $ (ภาพนักเทียบท่า -a -q)" -q ส่งกลับค่ารหัสรูปภาพ
Jimmy MG Lim

นั่นหมายความว่าได้ลบภาพเหล่านั้นแล้ว ตรวจสอบอีกครั้ง
Deep Nirmal

3

วิธีลบภาพทั้งหมด:

docker rmi -f $(docker images -a | awk {'print $3'})

คำอธิบาย:

ภาพนักเทียบท่า -a | awk {'พิมพ์ $ 3'}

คำสั่งนี้จะส่งคืนรหัสรูปภาพทั้งหมดและใช้เพื่อลบภาพโดยใช้รหัส


3

ลบโดยไม่เรียกนักเทียบท่า :

rm -rf /var/lib/docker

สิ่งนี้ไม่แนะนำถ้าคุณสามารถรันนักเทียบท่าได้ตามปกติ แต่ถ้าด้วยเหตุผลใดก็ตามที่คุณทำไม่ได้หรือไม่ต้องการสิ่งนี้จะใช้ได้


2

คุณสามารถลองสิ่งนี้:

docker system prune

ในกรณีของฉันนี่จะเป็นการลบโวลุ่มที่ฉันยังใช้อยู่ อย่าใช้สิ่งนี้หากคุณไม่รู้ว่ามันทำอะไร
Zach Smith

2

วิธีลบภาพทั้งหมด:

docker rmi $(docker images -a -q)

โดยที่ -a คือทั้งหมดและ -q จะส่งคืนรหัสรูปภาพเท่านั้น

วิธีลบภาพที่ไม่ได้ใช้และตู้คอนเทนเนอร์:

docker system prune

ระวังราวกับว่าคุณกำลังใช้ Docker Swarm และเครื่องในพื้นที่ของคุณกำลังเข้าร่วม Swarm ระยะไกล (ในฐานะผู้จัดการ / ผู้ปฏิบัติงาน) ท้องถิ่นของคุณจะเป็น repo ที่ปรับใช้ การดำเนินการนี้จะลบอิมเมจที่นำไปใช้


2
docker rmi $(docker images -q) --force

2
คุณควรเพิ่มคำอธิบายเมื่อออกจากคำตอบในโพสต์เพื่อให้คนอื่นค้นพบในภายหลังสามารถเข้าใจได้
Morphyish

1

การเพิ่มคำตอบที่ยอมรับของ techtabu ถ้าคุณใช้นักเทียบท่าบน windows คุณสามารถใช้คำสั่งต่อไปนี้

for /F "delims=" %A in ('docker ps -a -q') do docker rm %A

ที่นี่คำสั่งdocker ps -a -qจะแสดงรายการรูปภาพทั้งหมดและรายการนี้จะถูกส่งต่อไปdocker rmทีละภาพ

ดูสิ่งนี้สำหรับรายละเอียดเพิ่มเติมว่ารูปแบบคำสั่งประเภทนี้ทำงานอย่างไรใน windows cmd



0

หากต้องการลบอิมเมจ Docker ในเครื่องทั้งหมดให้ทำตาม 2 ขั้นตอน ::

ขั้นตอนที่ 1: ภาพนักเทียบท่า (รายการภาพทั้งหมดนักเทียบท่าที่มีรหัส)

     example :
     REPOSITORY    TAG    IMAGE ID            CREATED             SIZE
     pradip564/my  latest 31e522c6cfe4        3 months ago        915MB

ขั้นตอนที่ 2: ภาพนักเทียบท่า rm 31e522c6cfe4 (รหัสภาพ)

      OUTPUT : image deleted
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.