2015-01-07 30 views
59

tôi chỉ kiểm tra/lib/Docker/thư mục khối lượng/var của tôi và phát hiện ra đó là bùng nổ với thư mục có tên như Docker UUIDs mỗi trong số đó có chứa một tập tin config.json với nội dung dọc theo dòng củaOrphaned Docker được lưu trữ trên máy chủ lưu trữ?

{"ID":"UUID","Path":"/path/to/mounted/volume","IsBindMount":true,"Writable":true} 

nơi

/path/to/mounted/volume 

là đường dẫn đến thư mục trên máy chủ được gắn vào hộp chứa đế với công tắc -v tại một số điểm. Tôi có các thư mục như vậy kể từ khi bắt đầu thử nghiệm với Docker, tức là khoảng 3 tuần trước.

Các thùng chứa đang được đề cập đã bị dừng và trình cắm được rm'ed một thời gian dài trước đây vì vậy tôi không thể thấy rằng các mục nhập đó không qua ngày bán theo ngày của họ. Điều này đặt ra câu hỏi - là bên trái tôi thấy một lỗi hoặc không cần phải tự loại bỏ các mục như vậy từ/var/lib/docker/volume?

Trả lời

133

Đối Docker 1.9 và lên có một cách tự nhiên:

Liệt kê tất cả khối lượng mồ côi với

$ docker volume ls -qf dangling=true

Loại bỏ tất cả chúng với

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

+1

Máy khách của tôi in từng tên ổ đĩa trên một dòng mới, vì vậy lệnh này chỉ xóa khối lượng đầu tiên rồi xử lý từng tập khác dưới dạng lệnh. Tôi đã sử dụng 'sed' để xóa các dòng mới: ' khối lượng docker rm $ (khối lượng docker ls -qf dangling = true | sed ': a; N; $! Ba; s/\ n// g') ' – emc

+0

@ emc, đối với một số, một for-loop có thể dễ đọc hơn là dùng sed: 'for v in $ (khối lượng docker ls -qf dangling = true); làm docker volume rm "$ v"; xong, ' – Kevin

+1

@Kevin Xargs cũng khá dễ đọc:' docker volume ls -qf 'dangling = true' | xargs docker volume rm' – emc

28

Từ hướng dẫn sử dụng Docker:

Nếu bạn loại bỏ các container mà gắn kết khối lượng, trong đó có chứa ban đầu dbdata, hoặc container db1 tiếp theo và DB2, khối lượng sẽ không bị xóa. Để xóa ổ đĩa khỏi đĩa, bạn phải gọi docker rm -v với vùng chứa cuối cùng với tham chiếu đến ổ đĩa. Điều này cho phép bạn nâng cấp hoặc di chuyển hiệu quả khối lượng dữ liệu giữa các vùng chứa. - source

Đây là hành vi có chủ ý để tránh mất dữ liệu ngẫu nhiên. Bạn có thể sử dụng một công cụ như docker-cleanup-volumes để làm sạch khối lượng không sử dụng.

+3

Yup. Bực mình, phải không? Tôi nghĩ chúng ta sẽ sớm có thêm nhiều công cụ để xử lý khối lượng. –

+0

Đặc biệt nếu bạn đột nhiên tìm thấy đĩa của bạn đầy đủ, và đang cố gắng để có được bên trong máy docker bản địa trên máy Mac. –

6

Đối Docker 1.13+ và số phát hành ce/ee 17+, sử dụng volume prune command

docker volume prune 

Không giống như truy vấn dangling=true, điều này sẽ không xóa khối lượng dựa trên trình điều khiển "từ xa".

Các vấn đề liên quan