Docker在使用中,但没有任何Docker容器

338
EDIT(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

对于其中很大一部分人而言,如果我一开始没有任何容器,这些体积是如何被使用的?


12
Docker使用引用计数来检查卷是否仍在使用,所有操作都在内存中完成。这可能是某种bug或竞争条件导致容器被删除,但计数器没有被更新。重启守护进程应该可以解决这个问题,但是可能存在bug。你的设置中是否有特殊之处(例如使用docker-in-docker、Swarm等)?你是否使用脚本或工具清理容器? - thaJeztah
8
嘿,谢谢 @thaJeztah 重新启动 Docker 守护进程(sudo service docker stopsudo service docker start)清理掉了所有幽灵卷。此外,现在使用 docker rm -v 命令可以轻松删除卷,似乎没有任何问题。唯一值得注意的区别是我在 Ubuntu 15.10 上使用了 docker-compose。如果我能够复制这个问题,我会再次报告,但否则似乎只需简单地重启即可解决。谢谢! - Tkwon123
4
即使重新启动,它仍然显示Docker卷正在使用中... - holms
16
如果您使用Docker Compose,可以在下达down命令时添加“-v”来删除卷。 - Niels Bech Nielsen
6
我通过停止 Docker,然后从文件系统中删除卷并重新启动 Docker 来解决了这个问题。 service docker stop && rm -rf /var/lib/docker/volumes/你想要删除的卷的ID && service docker start - jfgrissom
显示剩余3条评论
13个回答

1
您可以在Docker桌面应用程序中删除它。我已经这样做了,一切正常。 enter image description here 就在这里:)

1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community
OP的问题是他们有正在使用的卷,而容器已不再运行。您无法删除正在使用的卷。 - Jan Dries

0
当使用Docker Desktop并安装了扩展时,它们可以拥有一个没有任何容器运行的Docker卷。
示例:
➜  ~ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
➜  ~ docker volume ls
DRIVER    VOLUME NAME
local     mochoa_pgadmin4-docker-extension-desktop-extension_pgadmin_data
➜  ~ docker volume rm mochoa_pgadmin4-docker-extension-desktop-extension_pgadmin_data 
Error response from daemon: remove mochoa_pgadmin4-docker-extension-desktop-extension_pgadmin_data: volume is in use - [3a453e427e63138c7f52168004805ebd1728d83fcdf242bbce97c2951bd0eadc]

-4
你应该使用-f标志来输入以下命令:
sudo docker volume rm -f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接