จะลบวอลุ่มนักเทียบท่าทั้งหมดได้อย่างไร?


94

ถ้าฉันทำdocker volume lsรายการไดรฟ์ข้อมูลของฉันจะเป็นดังนี้:

DRIVER              VOLUME NAME
local               305eda2bfd9618266093921031e6e341cf3811f2ad2b75dd7af5376d037a566a
local               226197f60c92df08a7a5643f5e94b37947c56bdd4b532d4ee10d4cf21b27b319
...
...
local               209efa69f1679224ab6b2e7dc0d9ec204e3628a1635fa3410c44a4af3056c301

และฉันต้องการลบไดรฟ์ข้อมูลทั้งหมดพร้อมกัน ฉันจะทำมันได้อย่างไร?

คำตอบ:


194

คำสั่งอย่างเป็นทางการในการลบข้อมูลที่ไม่ได้ใช้ทั้งหมด (รวมถึงไดรฟ์ข้อมูลที่ไม่มีคอนเทนเนอร์) จะอยู่ใน Docker 1.13

docker system prune  

หากคุณต้องการ จำกัด ปริมาณเพียงอย่างเดียวให้ลบเฉพาะไดรฟ์ข้อมูลที่ไม่ได้ใช้ :

docker volume prune

คุณยังมีdocker image prune, docker container pruneฯลฯ :
ดูเพิ่มเติมได้ที่ " วัตถุพรุนที่ไม่ได้ใช้หาง "

ดูกระทำ 86de7c0และPR 26108

คุณสามารถดูได้ในplay-with-docker.com :

/ # docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
1296a5e47ef3        hello-world         "/hello"            7 seconds ago       Exited (0) 6 seconds ago                       prickly_poincare

/ # docker system  prune
WARNING! This will remove:
        - all stopped containers
        - all volumes not used by at least one container
        - all networks not used by at least one container
        - all dangling images
Are you sure you want to continue? [y/N] y
Deleted Containers:
1296a5e47ef3ab021458c92ad711ad03c7f19dc52f0e353f56f062201aa03a35

วิธีการจัดการไดรฟ์ข้อมูลปัจจุบัน (ก่อนนักเทียบท่า 1.13) ถูกนำมาใช้กับPR 14242 และdocker volumeคำสั่งซึ่งมีเอกสารในข้อคิดเห็นตั้งแต่เดือนกรกฎาคม 2015:

docker volume rm $(docker volume ls -q --filter dangling=true)

ยอดเยี่ยมมากขอบคุณ ฉันไม่รู้เกี่ยวกับpruneคำสั่งใหม่
treeface

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

docker system pruneดูเหมือนจะไม่ลบโวลุ่มในเครื่อง แต่จัดdocker volume pruneเรียงออก
Maciek Rek

23

แก้ไขเมื่อ 2017: คำตอบนี้ได้รับเมื่อ 16 เม.ย. 59 และตอนนี้ล้าสมัยแล้วและถูกต้องสำหรับนักเทียบท่ารุ่นก่อน 1.13 เท่านั้นโปรดใช้คำตอบจาก @VonC ตอนนี้ถูกทำเครื่องหมายว่าถูกต้อง

ในการลบไดรฟ์ข้อมูลที่ไม่ได้ใช้คุณสามารถใช้volume rmคำสั่งdocker ในตัว rmคำสั่งลบไดเรกทอรีใด ๆ ใน/var/lib/docker/volumesที่ไม่ได้เป็นไดรฟ์เพื่อให้แน่ใจว่าคุณไม่ได้ใส่อะไรในนั้นคุณต้องการบันทึก:
คำสั่งปริมาณรายการขวานิด ๆ หน่อย ๆ กว่าของคุณ:

$ docker volume ls -qf dangling=true

ทำความสะอาด:

$ docker volume rm $(docker volume ls -qf dangling=true)

รายละเอียดเพิ่มเติมเกี่ยวกับ ls ที่นี่เกี่ยวกับ rm ที่นี่


1
ฉันจะไม่เรียกใช้โดยไม่ทดสอบรายการไดรฟ์ข้อมูลห้อยกับ--dry-runพารามิเตอร์ก่อน
Sergei Rodionov

ไม่มี--dry-runตัวเลือกใดๆ
Harald Albers

1
คำตอบนี้คือคำตอบหากคุณต้องการลบไดรฟ์ข้อมูลทั้งหมดไม่ว่าจะเกิดอะไรขึ้นก็ตาม ขอบคุณ!
MücahitYılmaz

5

นี่คือสิ่งที่ฉันพบว่ามีประโยชน์: https://github.com/chadoe/docker-cleanup-volumes

Shellscript เพื่อลบไดรฟ์ข้อมูล Docker ที่ถูกละเลยใน / var / lib / docker / วอลุ่มและ / var / lib / docker / vfs / dir Docker เวอร์ชัน 1.4.1 สูงสุด 1.11.x

โดยพื้นฐานแล้วจะทำการล้างข้อมูลของไดรฟ์ข้อมูลที่ถูกทอดทิ้ง / ห้อย แต่จะรวมถึง--dry-runแต่ก็ทำให้ทราบถึงคำสั่งที่รวมนักเทียบท่าด้วยเช่นกัน (ซึ่งอ้างอิงในความคิดเห็นก่อนหน้า)

หมายเหตุเกี่ยวกับ Docker 1.9 ขึ้นไป

หากต้องการลบไดรฟ์ข้อมูลที่ไม่มีเจ้าของใน Docker 1.9 ขึ้นไปคุณยังสามารถใช้คำสั่งโวลุ่มเทียบท่าในตัวแทนสคริปต์ไดรฟ์ข้อมูล Docker-cleanup-volumes นี้ คำสั่งในตัวยังลบไดเร็กทอรีใด ๆ ใน / var / lib / docker / volume ที่ไม่ใช่ไดรฟ์ข้อมูลดังนั้นตรวจสอบให้แน่ใจว่าคุณไม่ได้ใส่อะไรลงไปที่คุณต้องการบันทึก:

รายการ:

$ docker volume ls -qf dangling=true

ทำความสะอาด:

$ docker volume rm $(docker volume ls -qf dangling=true)

หรือจัดการ no-op ได้ดีกว่า แต่เฉพาะ Linux:

$ docker volume ls -qf dangling=true | xargs -r docker volume rm

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