2015-01-07 59 views
59

我只是檢查了我的/ var/lib中/泊塢窗/卷的文件夾,並發現與命名爲碼頭工人的UUID的文件夾,每個都包含有沿孤立的Docker裝入主機卷?

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

其中

行內容的config.json文件爆棚
/path/to/mounted/volume 

是主機上某個時間點用-v開關裝載到docker容器上的文件夾的路徑。我有這樣的文件夾可以追溯到我對Docker的實驗開始,即大約3周前。

有問題的集裝箱已經停了很久,碼頭工人很久以前就沒有看到那些物品沒有超過他們的銷售日期。這引出了問題 - 剩下的是我看到一個錯誤還是需要手動拋棄/ var/lib/docker/volumes中的這些條目?

回答

133

對於泊塢窗1.9及以上有一個土辦法:

列出所有孤兒卷與

$ docker volume ls -qf dangling=true

消除所有的人都用

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

+1

我的客戶端在新行上打印每個卷名稱,因此該命令僅刪除第一個卷,然後將其他卷作爲命令處理。我用'sed'去除換行符: 'docker volume rm $(docker volume ls -qf dangling = true | sed':a; N; $!ba; s/\ n// g')' – emc

+0

@ emc,對於某些人來說,for循環可能比使用sed:'for v in $(docker volume ls -qf dangling = true)更具可讀性;碼頭工作人員要求「$ v」;完成;' – Kevin

+1

@Kevin Xargs也是非常可讀的:'docker volume ls -qf'dangling = true'| xargs docker volume rm' – emc

28

從泊塢窗的用戶指南:

如果刪除安裝卷,包括初始dbdata容器或接下來的容器DB1和DB2的容器,卷將不會被刪除。要從磁盤刪除卷,必須顯式調用docker rm -v對最後一個容器的卷引用。這使您可以升級或在容器之間有效遷移數據卷。 - source

這是有意的行爲以避免意外的數據丟失。您可以使用像docker-cleanup-volumes這樣的工具清理未使用的卷。

+3

是。討厭,不是嗎?我認爲我們將很快獲得更多處理卷的工具。 –

+0

特別是如果你突然發現你的磁盤已滿,並且試圖進入Mac上的docker本機。 –

6

對於泊塢1.13+和ce/ee 17+版本號,請使用volume prune command

docker volume prune 

dangling=true查詢不同,這不會刪除「遠程」基於驅動程序的卷。