Làm thế nào để loại bỏ tất cả khối lượng docker?


94

Nếu tôi làm vậy docker volume ls, danh sách các tập của tôi sẽ như thế này:

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

và tôi muốn xóa tất cả các tập của mình cùng một lúc. Tôi làm nó như thế nào?

Câu trả lời:


194

Lệnh chính thức để xóa tất cả dữ liệu không sử dụng (bao gồm cả ổ đĩa không có vùng chứa) sẽ có trong docker 1.13

docker system prune  

Nếu bạn chỉ muốn giới hạn ở các tập, chỉ xóa các tập không sử dụng :

docker volume prune

Bạn cũng có docker image prune, docker container prunev.v.:
Xem thêm tại " Tỉa các đối tượng Docker không sử dụng ".

Xem cam kết 86de7c0PR 26108 .

Bạn có thể thấy nó hoạt động trong 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

Cách quản lý khối lượng hiện tại (pre-docker 1.13) đã được giới thiệu với PR 14242 và docker volumelệnh , được ghi lại trong nhận xét của nó từ tháng 7 năm 2015:

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

Điều này là tuyệt vời, cảm ơn. Tôi không biết về các prunelệnh mới .
treeface

3
Các lệnh cắt tỉa rất hay, nhưng hãy cẩn thận với chúng. Có vẻ như họ cho rằng các thùng chứa đang chạy vào thời điểm bạn gọi chúng. Nó sẽ xóa những thứ có thể được liên kết nhưng không được sử dụng tích cực (ví dụ như mạng) dẫn đến lỗi vào lần tới khi các vùng chứa hiện có khởi động. Sử dụng các danglingbộ lọc trước thời hạn nếu bạn không chắc chắn về những gì có thể được cắt tỉa :)
jocull

docker system prunedường như không xóa các tập cục bộ nhưng docker volume prunesắp xếp nó ra
Maciek Rek

23

Đã chỉnh sửa vào năm 2017: Câu trả lời này được đưa ra vào ngày 16 tháng 4 năm 2016 và hiện đã lỗi thời và chỉ đúng cho phiên bản docker trước 1.13, vui lòng sử dụng câu trả lời từ @VonC, bây giờ câu trả lời được đánh dấu là đúng

Để xóa các ổ đĩa không sử dụng, bạn có thể sử dụng volume rmlệnh docker tích hợp sẵn . Các rmlệnh cũng xóa bất kỳ thư mục trong /var/lib/docker/volumesđó không phải là một khối lượng, do đó hãy chắc chắn rằng bạn không đặt bất cứ điều gì trong đó bạn muốn tiết kiệm:
Command để tập List, chút đúng hơn của bạn:

$ docker volume ls -qf dangling=true

Dọn dẹp:

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

thêm chi tiết về ls ở đây , về rm ở đây


1
Tôi sẽ không chạy nó với nếu không kiểm tra danh sách các ổ đĩa treo có --dry-runtham số trước.
Sergei Rodionov

Không có --dry-runtùy chọn.
Harald Albers

1
câu trả lời này là câu trả lời nếu bạn muốn xóa tất cả các tập không có vấn đề gì. cảm ơn!
Mücahit Yılmaz

5

Đây là những gì tôi thấy hữu ích: https://github.com/chadoe/docker-cleanup-volumes

Shellscript để xóa khối lượng docker mồ côi trong / var / lib / docker / volume và / var / lib / docker / vfs / dir Docker phiên bản 1.4.1 lên đến 1.11.x

Về cơ bản, nó thực hiện dọn dẹp bất kỳ khối lượng mồ côi / lơ lửng nào, nhưng nó bao gồm một --dry-runnhưng nó cũng lưu ý một số lệnh bao gồm docker (được tham chiếu trong bình luận trước)

Lưu ý về Docker 1.9 trở lên

Để xóa các tập không có trong Docker 1.9 trở lên, bạn cũng có thể sử dụng các lệnh âm lượng tích hợp sẵn trong docker thay vì tập lệnh docker-cleanup-volume này. Lệnh tích hợp cũng xóa bất kỳ thư mục nào trong / var / lib / docker / volume không phải là volume, vì vậy hãy đảm bảo rằng bạn không đặt bất kỳ thứ gì vào đó mà bạn muốn lưu:

Danh sách:

$ docker volume ls -qf dangling=true

Dọn dẹp:

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

Hoặc, xử lý no-op tốt hơn nhưng dành riêng cho Linux:

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

3

Để trả lời câu hỏi và mượn từ Marc, điều này hoạt động:

$ docker volume rm $(docker volume ls -qf dangling=true | xargs)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.