如何使用“docker卷修剪”?(`docker volume prune`即使在容器运行时也删除所有卷)

如何使用“docker卷修剪”?(`docker volume prune`即使在容器运行时也删除所有卷),docker,docker-volume,Docker,Docker Volume,docker文档中有如下内容: docker卷修剪==删除所有未使用的本地卷 为了测试这一点,我使用docker hub的官方最新图片设置了一个MongoDb容器。这样,在后台创建了2个卷,容器可能需要这些卷来存储数据 现在运行docker volume ls时,我可以看到两个卷的随机名称 假设有多个容器,其中的卷使用随机名称。现在很难知道其中哪些仍在使用,因此我希望docker volume prune能在这里提供帮助 因此,我执行了该命令,希望docker volume prune不会删除任

docker文档中有如下内容:

docker卷修剪
==删除所有未使用的本地卷

为了测试这一点,我使用docker hub的官方最新图片设置了一个MongoDb容器。这样,在后台创建了2个卷,容器可能需要这些卷来存储数据

现在运行
docker volume ls
时,我可以看到两个卷的随机名称

假设有多个容器,其中的卷使用随机名称。现在很难知道其中哪些仍在使用,因此我希望
docker volume prune
能在这里提供帮助

因此,我执行了该命令,希望
docker volume prune
不会删除任何内容,因为我的容器已启动并使用MongoDb运行。 但实际上,我所有的卷都被删除了。在此之后,我的容器关闭,无法重新启动

我多次尝试重新创建它,每次即使我的容器正在运行,该命令也会删除所有卷

docker rm -vf $(docker ps -aq) && docker volume prune -f
有人能解释这种行为吗

更新:

以下带有MongoDB映像容器id的命令显示了2个卷:

docker inspect -f '{{ .Mounts }}' *CONTAINER_ID*
据我所知,docker知道这些卷和容器属于一个整体

当我要求docker向我展示悬挂的卷时,它会再次向我展示相同的卷:

docker volume ls --filter dangling=true

因此,当它们悬空时,prune命令删除它们对我来说是有意义的。但是我的容器中显然有卷,所以我不清楚。

您可以删除所有现有容器,然后删除所有卷

docker rm -vf $(docker ps -aq) && docker volume prune -f

只有未使用的卷

docker volume prune -f

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

您能否提供有关如何创建卷以及如何使用卷的信息?您好,docker volume prune不会删除容器正在使用的卷,您可能尚未将卷装载到mongodb。“docker volume ls”返回两个卷的事实并不意味着卷已装入。@KonstantinosKatsantonis Hi,因此您的意思是,即使这些卷是默认从映像创建的,并且MongoDB正在工作,我仍然需要自己额外挂载它们,以便码头工人知道它们属于一起?您的编辑清楚地表明,这些卷正在由容器使用,您可以共享您用于设置mongo的Dockerfile吗?@KonstantinosKatsantonis我实际上没有额外的Dockerfile。我只从docker hub获取了MongoDb的最新图片并运行了它。我也需要建立一个dockerfile吗?尽管基本映像本身会对这些卷进行排序,但至少mongo映像的文档中是这么说的。“让Docker通过使用自己的内部卷管理将数据库文件写入主机系统上的磁盘来管理数据库数据的存储。这是默认设置,对用户来说很容易且相当透明。缺点是工具可能很难找到文件…”