2016-01-07 16 views
29

Tôi gặp sự cố khi xóa ổ đĩa docker với Docker 1.9.1.Trình cắm đang ở mức đang sử dụng nhưng không có vùng chứa đế lót ly

Tôi đã xóa tất cả các vùng chứa đã dừng để docker ps -a trả về sản phẩm nào.

Khi tôi sử dụng docker volume ls, tôi được cung cấp toàn bộ lưu trữ vùng chứa docker.

docker volume ls 
DRIVER    VOLUME NAME 
local    a94211ea91d66142886d72ec476ece477bb5d2e7e52a5d73b2f2f98f6efa6e66 
local    4f673316d690ca2d41abbdc9bf980c7a3f8d67242d76562bbd44079f5f438317 
local    eb6ab93effc4b90a2162e6fab6eeeb65bd0e4bd8a9290e1bad503d2a47aa8a78 
local    91acb0f7644aec16d23a70f63f70027899017a884dab1f33ac8c4cf0dabe5f2c 
local    4932e2fbad8f7e6246af96208d45a266eae11329f1adf176955f80ca2e874f69 
local    68fd38fc78a8f02364a94934e9dd3b5d10e51de5b2546e7497eb21d6a1e7b750 
local    7043a9642614dd6e9ca013cdf662451d2b3df6b1dddff97211a65ccf9f4c6d47 
#etc x 50 

Vì không có tập nào chứa bất kỳ điều gì quan trọng, tôi cố gắng tẩy sạch tất cả các tập với docker volume rm $(docker volume ls -q).

Trong quá trình này, phần lớn được loại bỏ nhưng tôi nhận được trở lại:

Error response from daemon: Conflict: volume is in use 
Error response from daemon: Conflict: volume is in use 
Error response from daemon: Conflict: volume is in use 
Error response from daemon: Conflict: volume is in use 
Error response from daemon: Conflict: volume is in use 

Đối với một tỷ trọng khá lớn trong số họ. Nếu tôi không có bất kỳ container tồn tại ở nơi đầu tiên, làm thế nào là những khối lượng được sử dụng?

+7

docker sử dụng tính toán tham chiếu để kiểm tra xem âm lượng vẫn đang được sử dụng hay không; điều này được thực hiện trong bộ nhớ; điều này có thể là một lỗi hoặc một tình trạng cuộc đua bằng cách nào đó, dẫn đến container bị loại bỏ, nhưng bộ đếm không được cập nhật. Việc khởi động lại daemon sẽ giải quyết vấn đề này, nhưng, có thể có một lỗi ở đâu đó.Có điều gì đặc biệt trong quá trình thiết lập của bạn không (ví dụ: Bạn đang sử dụng docker-in-docker, Swarm?). Bạn có sử dụng một số tập lệnh hoặc công cụ để dọn dẹp các vùng chứa của mình không? – thaJeztah

+1

Trong docker '1.9.0'. Tôi thử các bước của bạn và có thể xóa tất cả các tập. – firelyu

+4

Xin cảm ơn @thaJeztah khởi động lại trình nền Docker ('sudo service docker stop' và' sudo service docker start') đã xóa tất cả các khối lượng ghost này cho tôi. Hơn nữa, có vẻ như tôi bây giờ có thể loại bỏ các ổ đĩa không có vấn đề bằng cách sử dụng lệnh docker rm -v. Chỉ có sự khác biệt đáng chú ý trong việc sử dụng là tôi đã sử dụng docker-compose trên Ubuntu 15.10. Tôi sẽ báo cáo lại nếu tôi có thể tái tạo vấn đề này, nhưng nếu không nó có vẻ như một khởi động lại đơn giản sẽ đủ. Cảm ơn! – Tkwon123

Trả lời

31

Gonsales ở đây!

Bạn có thể sử dụng các chức năng này để loại bỏ tàn nhẫn tất cả mọi thứ liên quan đến Docker

removecontainers() { 
    docker stop $(docker ps -aq) 
    docker rm $(docker ps -aq) 
} 

armaggedon() { 
    removecontainers 
    docker network prune -f 
    docker rmi -f $(docker images --filter dangling=true -qa) 
    docker volume rm $(docker volume ls --filter dangling=true -q) 
    docker rmi -f $(docker images -qa) 
} 

Bạn có thể thêm những để ~/Xrc tập tin của bạn, trong đó X là thông dịch viên shell của bạn (~/.bashrc nếu bạn đang sử dụng bash) tập tin và tải lại thông qua việc thực hiện source ~/Xrc. Ngoài ra, bạn có thể chỉ cần sao chép dán chúng vào giao diện điều khiển và sau đó (bất kể các tùy chọn mà bạn mất trước để có được những chức năng sẵn sàng) chỉ cần chạy:

armaggedon

Tôi hy vọng nó sẽ giúp! Nó cũng hữu ích cho việc dọn dẹp tổng thể. Lưu ý rằng điều này cũng sẽ xóa hình ảnh của bạn, không chỉ các vùng chứa của bạn (dù đang chạy hay không) và khối lượng của bạn thuộc bất kỳ loại nào.

+0

Mỗi câu hỏi, lệnh' docker volume rm' không thành công. Từ các bình luận, giải pháp dường như là khởi động lại trình nền của docker để sửa số tham chiếu. – BMitch

+1

@BMitch nếu bạn đọc cẩn thận thông qua các bình luận, đó không phải là giải pháp cho điều này: '' 'ngay cả sau khi khởi động lại nó vẫn nói khối lượng docker đang được sử dụng..''' –

+0

holms dường như có một vấn đề khác và không người đã đăng câu hỏi. Tra cứu một bình luận ở trên. – BMitch

0

Tôi khá chắc chắn rằng những tập này thực sự được gắn trên hệ thống của bạn. Nhìn vào/proc/mounts và bạn sẽ thấy chúng ở đó. Bạn có thể cần phải sudo umount <path> hoặc sudo umount -f -n <path>. Bạn sẽ có thể nhận được đường dẫn được gắn kết trong/proc/mounts hoặc thông qua docker volume inspect

1

Tôi khá mới với docker. Tôi đã làm sạch một số mess thử nghiệm ban đầu và không thể loại bỏ một khối lượng. Tôi đã dừng tất cả các trường hợp đang chạy, thực hiện một docker rmi -f $(docker image ls -q), nhưng vẫn nhận được Error response from daemon: unable to remove volume: remove uuid: volume is in use.

Tôi đã làm một docker system prune và nó dọn dẹp những gì là cần thiết để loại bỏ các khối lượng lần cuối:

[0]$ docker system prune 
WARNING! This will remove: 
- all stopped containers 
- all networks not used by at least one container 
- all dangling images 
- all build cache 
Are you sure you want to continue? [y/N] y 
Deleted Containers: 
... about 15 containers UUID's truncated 

Total reclaimed space: 2.273MB 
[0]$ docker volume ls 
DRIVER    VOLUME NAME 
local    uuid 
[0]$ docker volume rm uuid 
uuid 
[0]$ 

https://docs.docker.com/engine/reference/commandline/system_prune/

Các khách hàng và daemon API cả phải có ít nhất 1,25 đến sử dụng lệnh này . Sử dụng lệnh lệnh docker trên máy khách để kiểm tra phiên bản API của trình khách và phiên bản API của bạn.

+0

Cảm ơn! Điều này đã làm cho các trick cho tôi – manncito

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