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

编辑(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

他们中的很大一部分人。如果我一开始就没有任何容器存在,那么如何使用这些卷呢?

191663 次浏览

你可以使用这些函数残酷地删除所有与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解释器(如果你使用bash,则为~/.bashrc)文件,并通过执行source ~/Xrc重新加载它们。此外,你可以复制粘贴它们到控制台,然后(不管你之前采取了什么选项来准备函数)只需运行:

armageddon

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

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

我对Docker还是个新手。我正在清理一些初始测试混乱,也无法删除一个卷。我已经停止了所有正在运行的实例,执行了docker rmi -f $(docker image ls -q),但仍然收到了Error response from daemon: unable to remove volume: remove uuid: volume is in use

我做了一个docker system prune,它清理了删除最后一个卷所需的东西:

[0]$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
... about 15 containers UUID's truncated


Total reclaimed space: 2.273MB
[0]$ docker volume ls
DRIVER              VOLUME NAME
local              uuid
[0]$ docker volume rm uuid
uuid
[0]$

docker system prune

要使用此命令,客户端和守护进程API都必须至少为1.25。使用 在客户端使用docker version命令检查客户端和守护进程的API版本

你应该用flag -f (force)输入这个命令:

sudo docker volume rm -f <VOLUME NAME>

也许卷是通过docker-compose创建的?如果是,它应该被:

docker-compose down --volumes

感谢Niels Bech Nielsen!

只要卷与容器相关联(运行或未运行),就不能删除卷。

你必须要跑

docker inspect <container-id>/<container-name>

在每个运行/非运行的容器上,此卷可能已被挂载到其中。

如果卷被挂载到任何一个容器上,你应该在检查命令输出的Mounts部分中看到它。大概是这样的:-

"Mounts": [
{
"Type": "volume",
"Name": "user1",
"Source": "/var/lib/docker/volumes/user1/_data",
"Destination": "/opt",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],

在确定负责的容器后,使用:-

< p > docker rm -f container-1 container-2 ...container-n 如果运行容器

< p > docker rm container-1 container-2 ...container-n 如果容器未运行

从主机上完全删除容器。

然后尝试使用以下命令移除卷:-

docker volume remove <volume-name/volume-id>

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

docker container prune

然后可以删除未使用的卷

docker volume prune

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

docker system prune

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

docker system prune -a

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

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

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

必须先删除使用该卷的容器。 按名称列出所有容器,包括已存在的容器:

docker ps --all --format '\{\{.Names}}'

移除容器:

docker rm NAME

在你移除容器之后,你也可以移除卷。 列出

的卷
docker volume ls

移除卷:

docker volume remove VOLUME_NAME
  1. 首先用下面的命令修剪不需要的容器:

    docker container prune
    

    (确保你真的想要移除所有的容器)

  2. 移除所有不需要的容器后,使用以下方法修剪卷:

    docker volume prune
    
你可以在Docker桌面应用程序中删除它。我已经做过了,一切都没问题。 enter image description here :) < / p >