我一直在使用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相关的所有内容:
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清理也很有用。请记住,这也将删除您的图像,不仅是您的容器(运行与否)和您的任何类型的卷。
我是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]$
客户端和守护程序API必须至少为1.25才能使用此命令。在客户端上使用
docker version
命令检查客户端和守护程序API版本。
卷可以由一个已停止的容器使用。您可以通过命令删除此类容器:
docker container prune
然后你可以删除未使用的卷
docker volume prune
只要卷与容器关联(运行与否),就无法删除它们。
你必须跑
docker inspect <container-id>/<container-name>
在可能已安装此卷的每个正在运行/未运行的容器上。
如果卷安装在任何一个容器上,您应该在inspect命令输出的Mounts部分中看到它。像这样: -
"Mounts": [
{
"Type": "volume",
"Name": "user1",
"Source": "/var/lib/docker/volumes/user1/_data",
"Destination": "/opt",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
找出负责任的容器后,使用: -
docker rm -f container-1 container-2 ...container-n
在运行容器的情况下
docker rm container-1 container-2 ...container-n
在非运行容器的情况下
从主机完全删除容器。
然后尝试使用以下命令删除卷: -
docker volume remove <volume-name/volume-id>
我很确定这些卷实际安装在您的系统上。查看/ proc / mounts,你会在那里看到它们。你可能需要sudo umount <path>
或sudo umount -f -n <path>
。您应该能够在/ proc / mounts中或通过docker volume inspect
获取已安装的路径
目前,您可以使用docker现在提供的一般和更完整的清洁:
docker system prune
要另外删除任何已停止的容器和所有未使用的图像(不只是悬空图像),请将-a
标志添加到命令:
docker system prune -a
您应该使用标志-f(强制)键入此命令:
sudo docker volume rm -f <VOLUME NAME>