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

时间:2016-01-07 15:22:46

标签: docker docker-machine

我一直在使用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

对于他们中相当大一部分。如果我首先没有任何容器,那么这些卷是如何使用的?

8 个答案:

答案 0 :(得分:84)

您可以使用这些功能粗暴地删除与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清理也很有用。请记住,这也将删除您的图像,不仅是您的容器(无论是否运行)和任何类型的卷。

答案 1 :(得分:44)

我是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版本。

答案 2 :(得分:8)

已停止的容器之一可以使用该卷。您可以通过以下命令删除此类容器:

docker container prune

然后您可以删除未使用的卷

docker volume prune

答案 3 :(得分:6)

只要卷与容器关联(正在运行或未运行),就无法删除它们。

您必须运行

docker inspect <container-id>/<container-name>
在每个可能已安装此卷的运行/非运行容器上的

如果将卷安装在任何一个容器上,则应该在 inspect命令输出的“安装”部分中看到它。像这样:-

"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>

答案 4 :(得分:2)

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

获取已安装的路径

答案 5 :(得分:1)

当前,您可以使用docker现在提供的功能进行常规和更彻底的清洁:

docker system prune

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

docker system prune -a

答案 6 :(得分:0)

一个衬里为您提供所需的详细信息:

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

搜索投诉量,您也要获得容器名称。

答案 7 :(得分:-3)

您应该使用标志-f(强制)输入此命令:

sudo docker volume rm -f <VOLUME NAME>