EDIT (2/19/21): A lot of time has elapsed since I asked this original question years ago and I've seen a flurry of activity since then. I re-selected an answer which I think is consistent with the most localized and safe option for solving this issue (which is typically associated with docker-compose). While docker did introduce the prune command, it is generally a dangerous operation and I would be cautious about using it as you may unintentionally impact other applications or setups you have on your machine


我在使用Docker 1.9.1删除Docker卷时遇到了一些问题。

我已经删除了所有停止的容器,因此docker ps -a返回空。

当我使用docker卷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卷rm $(docker卷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-compose创建的?如果是这样,它应该被删除:

docker-compose down --volumes

感谢尼尔斯·贝克·尼尔森!

其他回答

你可以使用这些函数残酷地删除所有与Docker相关的东西:

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

armageddon() {
    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)
}

您可以将它们添加到您的~/Xrc文件中,其中X是您的shell解释器(~/。bashrc文件(如果你使用bash),然后通过执行source ~/Xrc重新加载它们。此外,你可以复制粘贴它们到控制台,然后(不管你之前采取了什么选项来准备函数)只需运行:

armageddon

它对于一般的Docker清理也很有用。请记住,这也将删除您的图像,不仅是您的容器(运行或未运行)和任何类型的卷。

我非常确定这些卷实际上已经安装在您的系统上。查看/proc/mounts,你会在那里看到它们。您可能需要sudo umount <path>或sudo umount -f -n <path>。你应该可以通过/proc/mounts或者docker volume inspect来获取挂载路径

只需要一行代码就能给出所需的细节:

docker inspect `docker ps -aq` | jq '.[] | {Name: .Name, Mounts: .Mounts}' | less

搜索投诉数量,你也有集装箱名称。

卷可以被停止的容器之一使用。你可以通过命令删除这样的容器:

docker container prune

然后可以删除未使用的卷

docker volume prune

目前你可以使用docker提供的更全面的清洁:

docker system prune

为了额外删除任何停止的容器和所有未使用的图像(不仅仅是悬空的图像),在命令中添加-a标志:

docker system prune -a