กำลังใช้รูปภาพโดยคอนเทนเนอร์ที่หยุด


94

ฉันกำลังพยายามลบคอนเทนเนอร์นักเทียบท่าด้วยคำสั่งนี้:

docker rmi <Image-Id>

เห็นได้ชัดว่าฉันได้แทนที่ Image-Id ด้วย Id ที่ฉันใช้:

docker images

แต่ฉันเห็นข้อผิดพลาดด้านล่าง:

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

คำตอบ:


122

คุณยังสามารถใช้--force , -fบังคับให้ลบรูปภาพได้

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

  docker rmi -f <image_id> 

1
ขอบคุณมันทำงานได้ดี แต่มีปัญหา ฉันลบอิมเมจ 10 GB แต่หลังจากลบแล้วฉันไม่เห็นการเปลี่ยนแปลงใด ๆ ในพื้นที่ว่างในดิสก์ของฉัน
Mehrdad Babaki

1
คุณลบไดรฟ์ข้อมูลที่แนบมาพร้อมกับรูปภาพหรือไม่และคุณตรวจสอบขนาดภาพของแต่ละภาพหรือไม่
Adiii

1
ไม่จริงฉันยังใหม่กับนักเทียบท่า ฉันจะลองใช้เครื่องมือฉันจะใช้บรรทัดคำสั่งเพื่อตรวจจับโวลุ่มและลบออกได้อย่างไร
Mehrdad Babaki

1
ใช่วอลุ่มนักเทียบท่า ls; เพื่อแสดงรายการระดับเสียงและเพื่อลบปริมาณนักเทียบท่า rm v_id
Adiii

40

คุณต้องลบคอนเทนเนอร์ที่หยุดด้วยdocker rmจากนั้นคุณสามารถลบภาพที่ใช้ด้วยdocker rmiได้


3
นี่เป็นส่วนหนึ่งของคำตอบทั้งหมด คุณสามารถบังคับให้ลบหรือลบภาพที่หยุดได้
bmacnaughton

28

นอกจากนี้คุณอาจพบว่าคุณได้หยุดตู้คอนเทนเนอร์ที่เป็นสาเหตุของการล็อก ลบสิ่งเหล่านี้ก่อนโดยใช้:

docker rm  $(docker ps -q -a)

ที่นี่เรากำลังแสดงรายการกระบวนการนักเทียบท่าโดยใช้เพียง ID จากนั้นจึงลบออก อย่างไรก็ตาม docker rm จะลบเฉพาะคอนเทนเนอร์ที่หยุดเท่านั้น

ถัดไปย้อนกลับและลบภาพโดยใช้:

docker image rm <image_id>

22

คุณต้องนำคอนเทนเนอร์ออกก่อน
การบังคับเป็นวิธีสุดท้ายที่จะดำเนินการ

#check container
docker ps -a

#remove container
docker rm containerID

3
คำตอบที่ดีที่สุดอย่างชัดเจน ผู้เดียวที่อธิบายวิธีรับรายการคอนเทนเนอร์ที่หยุด
Marco

4

ในกรณีที่docker rmi <image-id>ไม่ได้ผลให้ลองทำดังนี้:

หยุดการทำงานของคอนเทนเนอร์ทั้งหมด

docker stop $(docker ps -aq)

นำภาชนะทั้งหมดออก

docker rm $(docker ps -aq)

ลบภาพทั้งหมด

docker rmi $(docker images -q)

3

นอกเหนือจากคำตอบอื่น ๆ ฉันมีปัญหาเดียวกันกับการใช้ Docker สำหรับ Mac แต่docker ps -aไม่แสดงคอนเทนเนอร์ที่กำลังทำงานอยู่ การdocker imagesแสดง:

docker/desktop-storage-provisioner   v1.0                605a0f683b7b        2 months ago        33.1MB
k8s.gcr.io/kube-controller-manager   v1.15.5             1399a72fa1a9        6 months ago        159MB
k8s.gcr.io/kube-proxy                v1.15.5             cbd7f21fec99        6 months ago        82.4MB
k8s.gcr.io/kube-apiserver            v1.15.5             e534b1952a0d        6 months ago        207MB
k8s.gcr.io/kube-scheduler            v1.15.5             fab2dded59dd        6 months ago        81.1MB
docker/kube-compose-controller       v0.4.23             a8c3d87a58e7        11 months ago       35.3MB
docker/kube-compose-api-server       v0.4.23             f3591b2cb223        11 months ago       49.9MB
k8s.gcr.io/coredns                   1.3.1               eb516548c180        16 months ago       40.3MB
k8s.gcr.io/etcd                      3.3.10              2c4adeb21b4f        17 months ago       258MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB

รูปภาพทั้งหมดนี้ใช้โดยแอป Docker หากคุณเปิดใช้งาน Kubernetes ในการตั้งค่า Docker for Mac มีส่วนสำหรับ Kubernetes หากคุณคลิกที่ "แสดงภาชนะระบบ (ขั้นสูง)" docker psพวกเขาจะปรากฏใน

หากคุณต้องการลบภาพเหล่านี้คุณต้องปิดการใช้งาน Kubernetes ผ่านแอพ Docker for Mac จากนั้นลองอีกครั้ง


2

คอนเทนเนอร์นักเทียบท่าทำงานอยู่ด้านบนของอิมเมจนักเทียบท่าคุณจะลบรูปภาพได้ก็ต่อเมื่อไม่ได้เชื่อมต่อกับคอนเทนเนอร์ใด ๆ ! ดังนั้นคุณต้องหยุดคอนเทนเนอร์และลบคอนเทนเนอร์จากนั้นคุณจึงสามารถลบรหัสรูปภาพได้

docker stop container-id และ docker rm container-id

จากนั้นลองลบ image docker rmi image-id

ข้อมูลเพิ่มเติมบางส่วนระบุไว้ในลิงค์ด้านล่าง ไชโย.!

https://docs.docker.com/config/pruning/


นี่ควรเป็นคำตอบที่ถูกต้องตามขั้นตอนของ stop container (docker-compose stop) -> remove container (docker rm <name of the container>) -> ลบรูปภาพที่เกี่ยวข้อง (docker rmi <image_id>)
kta

1

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

การดำเนินการนี้จะไม่ลบภาพที่ระบุชื่อ แต่จะลบภาพที่ไม่มีชื่อระดับกลาง ขึ้นอยู่กับขนาดของคอนเทนเนอร์ที่คุณใช้ซึ่งสามารถประหยัดเนื้อที่ดิสก์ได้มาก


0

หากคุณมีการเปลี่ยนแปลงในDockerfileและถ้าคุณกำลังใช้เขียนนักเทียบท่าคุณก็สามารถสร้างภาพของคุณโดยการทำงานdocker-compose กับ--buildตัวเลือก!


หากคุณทำการเปลี่ยนแปลงใด ๆ กับDockerfileคุณห้ามลบภาพด้วยตัวเองเพียงแค่ใช้แฟล็ก--buildด้วยdocker-composeดังนั้นมันจึงสร้างภาพใหม่ขึ้นมาพร้อมกับการเปลี่ยนแปลง
ans1genie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.