【发布时间】:2016-01-07 15:22:46
【问题描述】:
编辑(2/19/21):自从我多年前提出这个原始问题以来已经过去了很长时间,从那时起我看到了一系列活动。我重新选择了一个我认为与解决此问题的最本地化和最安全的选项一致的答案(通常与 docker-compose 相关联)。虽然 docker 确实引入了 prune 命令,但它通常是一个危险的操作,我会谨慎使用它,因为您可能会无意中影响您机器上的其他应用程序或设置
我在使用 Docker 1.9.1 删除 Docker 卷时遇到问题。
我已删除所有已停止的容器,以便 docker ps -a 返回空。
当我使用 docker volume ls 时,我得到了一整套 Docker 容器:
docker volume ls
DRIVER VOLUME NAME
local a94211ea91d66142886d72ec476ece477bb5d2e7e52a5d73b2f2f98f6efa6e66
local 4f673316d690ca2d41abbdc9bf980c7a3f8d67242d76562bbd44079f5f438317
local eb6ab93effc4b90a2162e6fab6eeeb65bd0e4bd8a9290e1bad503d2a47aa8a78
local 91acb0f7644aec16d23a70f63f70027899017a884dab1f33ac8c4cf0dabe5f2c
local 4932e2fbad8f7e6246af96208d45a266eae11329f1adf176955f80ca2e874f69
local 68fd38fc78a8f02364a94934e9dd3b5d10e51de5b2546e7497eb21d6a1e7b750
local 7043a9642614dd6e9ca013cdf662451d2b3df6b1dddff97211a65ccf9f4c6d47
#etc x 50
由于这些卷都不包含任何重要内容,我尝试使用docker volume rm $(docker volume ls -q) 清除所有卷。
在这个过程中,大部分都被删除了,但我又回来了:
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
其中相当一部分。如果我一开始没有任何容器,这些卷是如何使用的?
【问题讨论】:
-
docker 使用引用计数来检查卷是否仍在使用中;这一切都在内存中完成;这可能是某种错误或竞争条件,导致容器被删除,但计数器未更新。重新启动守护程序应该可以解决此问题,但是,是的,某处可能存在错误。您的设置中有什么特别之处吗(例如,您使用的是 docker-in-docker、Swarm 吗?)。您是否使用一些脚本或工具来清理您的容器?
-
嘿,谢谢@thaJeztah 重新启动 Docker 守护程序(
sudo service docker stop和sudo service docker start)为我清除了所有这些幽灵卷。此外,似乎我现在可以使用 docker rm -v 命令毫无问题地删除卷。唯一显着的使用差异是我一直在 Ubuntu 15.10 上使用 docker-compose。如果我能够复制此问题,我会报告,否则似乎简单的重启就足够了。谢谢! -
即使重启后它仍然说 docker volume 正在使用中..
-
如果你使用 docker compose,你可以在 down 命令中添加 -v 来删除卷。
-
我通过停止 docker 然后从文件系统中删除卷并再次启动 docker 来解决此问题。
service docker stop && rm -rf /var/lib/docker/volumes/TheVolumIdYouWantToRemove && service docker start
标签: docker docker-machine