我已经搜索了一段时间,但找不到分析Docker容器/卷的磁盘使用情况的方法.
我可以看到Docker需要12GB的文件系统:
2.7G /var/lib/docker/vfs/dir 2.7G /var/lib/docker/vfs 2.8G /var/lib/docker/devicemapper/mnt 6.3G /var/lib/docker/devicemapper/devicemapper 9.1G /var/lib/docker/devicemapper 12G /var/lib/docker
但是,我怎么知道这是如何分布在容器上的呢?
我尝试通过运行附加到容器(新的v1.3命令)
docker exec -itbash
然后运行'df -h'来分析磁盘使用情况.它似乎有效,但不适用于使用'volume-from'的容器.
例如,我使用MongoDB的仅数据容器,称为"mongo-data".
当我运行docker run -it --volumes-from mongo-data busybox
,然后df -h
在容器内部,它说安装在/data/db
(我的'mongo-data'仅数据容器)上的文件系统使用11.3G,但是当我这样做时du -h /data/db
,它说它只使用2.1G.
那么,我如何分析容器/卷磁盘的使用情况呢?或者,在我的情况下,我如何找出'mongo-data'容器大小?
非常感谢,
在1.13.0之后,Docker包含一个docker system df
显示docker磁盘使用情况的新命令.
$ docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 5 1 2.777 GB 2.647 GB (95%) Containers 1 1 0 B 0B Local Volumes 4 1 3.207 GB 2.261 (70%)
显示有关空间使用情况的更多详细信息
$ docker system df --verbose
要查看容器的文件大小,可以使用以下--size
参数docker ps
:
docker ps --size
将此作为答案发布,因为我上面的评论被隐藏了:
列出容器的大小:
du -d 2 -h /var/lib/docker/devicemapper | grep `docker inspect -f "{{.Id}}" <container_name>`
列出容器卷的大小:
docker inspect -f "{{.Volumes}}" <container_name> | sed 's/map\[//' | sed 's/]//' | tr ' ' '\n' | sed 's/.*://' | xargs sudo du -d 1 -h
编辑:列出所有正在运行的容器的大小和卷:
for d in `docker ps -q`; do d_name=`docker inspect -f {{.Name}} $d` echo "=========================================================" echo "$d_name ($d) container size:" sudo du -d 2 -h /var/lib/docker/devicemapper | grep `docker inspect -f "{{.Id}}" $d` echo "$d_name ($d) volumes:" docker inspect -f "{{.Volumes}}" $d | sed 's/map\[//' | sed 's/]//' | tr ' ' '\n' | sed 's/.*://' | xargs sudo du -d 1 -h done
注意:根据您的Docker文件系统更改'devicemapper'(例如'aufs')
(这个答案没用,但是因为有些评论可能会留在这里)
docker images
将显示"虚拟大小",即包括所有较低层的总数.如果你有共享相同基本图像的容器,那么有些重复计算.
文件
您可以使用
docker history IMAGE_ID
了解图像大小如何在其各个子组件之间分配。
我曾经docker stats $(docker ps --format={{.Names}}) --no-stream
得到:
CPU使用率,
内存使用情况/分配给容器的总内存(可以使用docker run命令分配)
记忆%
块I / O
净I / O
音量部分不再起作用,所以如果有人感兴趣,我只需更改上面的脚本:
for d in `docker ps | awk '{print $1}' | tail -n +2`; do d_name=`docker inspect -f {{.Name}} $d` echo "=========================================================" echo "$d_name ($d) container size:" sudo du -d 2 -h /var/lib/docker/aufs | grep `docker inspect -f "{{.Id}}" $d` echo "$d_name ($d) volumes:" for mount in `docker inspect -f "{{range .Mounts}} {{.Source}}:{{.Destination}} {{end}}" $d`; do size=`echo $mount | cut -d':' -f1 | sudo xargs du -d 0 -h` mnt=`echo $mount | cut -d':' -f2` echo "$size mounted on $mnt" done done