Docker / var / lib / docker / devicemapper / devicemapper使用2.7GB

我是codiva在线ide的开发者。 每次用户运行一个Java程序,我们开始一个新的容器。 我们使用devicemapper存储驱动程序,因为这是我们能够设置容器大小上限的唯一方法。

经过几个月的使用后,我们看到磁盘使用量在增加,而/ var / lib / docker / devicemapper / devicemapper需要大约2.7GB。

我已经删除了所有未运行的docker容器以及任何悬挂的卷,不幸的是,/ var / lib / docker / devicemapper / devicemapper的磁盘使用率仍然显示为2.7GB。

回收这个空间的最好方法是什么? 我们不需要任何持久性存储,我们可以删除所有的数据,因为需要存储的数据,我们直接挂载主机目录,这些文件在Docker之外pipe理。

sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 

没有运行甚至停止的容器。 docker信息结果在这里。

 $ sudo docker info Containers: 1 Images: 14 Server Version: 1.9.1 Storage Driver: devicemapper Pool Name: docker-202:1-143417-pool Pool Blocksize: 65.54 kB Base Device Size: 107.4 GB Backing Filesystem: ext4 Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 2.591 GB Data Space Total: 107.4 GB Data Space Available: 1.469 GB Metadata Space Used: 2.531 MB Metadata Space Total: 2.147 GB Metadata Space Available: 1.469 GB Udev Sync Supported: true Deferred Removal Enabled: false Deferred Deletion Enabled: false Deferred Deleted Device Count: 0 Data loop file: /var/lib/docker/devicemapper/devicemapper/data Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata Library Version: 1.02.77 (2012-10-15) Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 3.13.0-76-generic Operating System: Ubuntu 14.04.3 LTS CPUs: 1 Total Memory: 992.5 MiB Name: ip-172-31-26-50 ID: NIQ5:2NDW:SB77:ZNZU:UO6G:EYLB:JIW7:SQLL:QLWY:LNRM:SU6P:ZS7X WARNING: No swap limit support 

没有悬挂或孤立的卷。

 sudo docker volume ls DRIVER VOLUME NAME 

唯一的图像是java:8

 sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE java 8 289bdffc37d7 3 weeks ago 669.2 MB 

我已经按照说明https://lebkowski.name/docker-volumes/ ,仍然使用不必要的额外空间。

编辑1:我已经添加了docker images -a的结果docker images -a 。 这显示了大量未命名的图像。 大小似乎是可疑的,因为所有这些图片的总和达到4.5GB,但我的整个/var/lib/docker只有大约2.7GB。

 $ sudo docker images -a REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE java 8 289bdffc37d7 3 weeks ago 669.2 MB <none> <none> 5d7cc49c4372 3 weeks ago 668.8 MB <none> <none> 9e756f3b105a 3 weeks ago 310.9 MB <none> <none> 7615ebf33bb7 3 weeks ago 310.9 MB <none> <none> ac079291ad51 3 weeks ago 310.9 MB <none> <none> cd02ed4609aa 3 weeks ago 310.9 MB <none> <none> 07bbd1c2007f 3 weeks ago 310.9 MB <none> <none> 6331ed9a346a 3 weeks ago 310.9 MB <none> <none> b647ad8e0a08 3 weeks ago 310.9 MB <none> <none> f23012d4423e 3 weeks ago 310.9 MB <none> <none> 0d3e866c82f3 3 weeks ago 301 MB <none> <none> c28cbef85c39 3 weeks ago 169.7 MB <none> <none> 3f0d3d140ce1 3 weeks ago 125.1 MB <none> <none> 17bd2058e0c6 3 weeks ago 125.1 MB 

尝试其中一个我得到的错误。 $ sudo docker rmi 5d7cc49c4372来自守护程序的错误响应:冲突:无法删除5d7cc49c4372(无法强制) – 图像有依赖子图像错误:无法删除图像:[5d7cc49c4372]

在阅读它,似乎是唯一所需的图像java:8取决于这些孩子的形象。

 $ sudo docker history 289bdffc37d7 IMAGE CREATED CREATED BY SIZE COMMENT 289bdffc37d7 3 weeks ago /bin/sh -c /var/lib/dpkg/info/ca-certificates 418.2 kB 5d7cc49c4372 3 weeks ago /bin/sh -c set -x && apt-get update && apt- 357.9 MB 7615ebf33bb7 3 weeks ago /bin/sh -c #(nop) ENV CA_CERTIFICATES_JAVA_VE 0 B 9e756f3b105a 3 weeks ago /bin/sh -c #(nop) ENV JAVA_DEBIAN_VERSION=8u9 0 B ac079291ad51 3 weeks ago /bin/sh -c #(nop) ENV JAVA_VERSION=8u91 0 B 07bbd1c2007f 3 weeks ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/jvm/ 0 B cd02ed4609aa 3 weeks ago /bin/sh -c { echo '#!/bin/sh'; echo 'set 87 B b647ad8e0a08 3 weeks ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0 B 6331ed9a346a 3 weeks ago /bin/sh -c echo 'deb http://httpredir.debian. 61 B f23012d4423e 3 weeks ago /bin/sh -c apt-get update && apt-get install 9.93 MB 0d3e866c82f3 3 weeks ago /bin/sh -c apt-get update && apt-get install 131.2 MB c28cbef85c39 3 weeks ago /bin/sh -c apt-get update && apt-get install 44.67 MB 3f0d3d140ce1 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B 17bd2058e0c6 3 weeks ago /bin/sh -c #(nop) ADD file:76679eeb94129df23c 125.1 MB 

这意味着,无标记的图像不能被删除,并且我认为在devise中使用的总大小应该仍然是〜670MB,因为docker只存储依赖图像的差异。

请让我知道如何减lessdevicemapper的磁盘使用情况。

您必须删除与容器关联的卷!

要做到这一点,请使用以下命令:

 docker rm -v $(docker ps -a -q -f status=exited) 

这似乎是devicemapper相当老的bug ,特别是如果你使用的是ext3。 如果你使用的是ext3,那么升级到ext4可能会解决你的问题。 该bug的主要症状是devicemapper不释放已删除的图像和卷​​。

简而言之,您可以完全清除/ var / lib / docker并重新安装,因为您认为数据丢失正常。