我可以看到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 -it <container_name> bash

然后运行'df -h'来分析磁盘使用情况。它似乎是有效的,但不是使用“volumes-from”的容器。

例如,我为MongoDB使用了一个仅数据的容器,称为“MongoDB -data”。

当我运行docker运行-it——volumes-from mongo-data busybox,然后在容器内df -h,它说文件系统安装在/data/db(我的'mongo-data'数据容器)使用11.3G,但当我做du -h /data/db时,它说它只使用2.1G。

那么,如何分析容器/卷磁盘使用情况呢?或者,在我的情况下,我如何找到'mongo-data'容器大小?


当前回答

因为我上面的评论被隐藏了,所以我把这个作为答案发了出来:

列出容器的大小:

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')

其他回答

音量部分不再工作,所以如果有人感兴趣,我只是改变了上面的脚本一点点:

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

要查看容器的文件大小,可以使用docker ps的——size参数:

docker ps --size

在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

我使用docker stats $(docker ps——format={{.Names}})——no-stream来获取:

CPU使用率, 内存使用量/分配给容器的内存总量(可以通过docker run命令分配) Mem % 块I / O 网络I / O

改进马克西姆的回答:

Docker ps——大小

你会看到这样的东西:

+---------------+---------------+--------------------+
| CONTAINER ID  | IMAGE         | SIZE               |
+===============+===============+====================+
| 6ca0cef8db8d  | nginx         | 2B (virtual 183MB) |
| 3ab1a4d8dc5a  | nginx         | 5B (virtual 183MB) |
+---------------+---------------+--------------------+

当启动容器时,容器从其启动的映像被挂载为只读(虚拟)。 在此之上,安装了一个可写层,对容器所做的任何更改都将写入其中。

因此,无论从同一个映像启动多少个容器,Virtual大小(示例中为183MB)都只使用一次——我可以启动1个容器或1000个;没有占用额外的磁盘空间。 “Size”(示例中的2B)是每个容器唯一的,因此磁盘上使用的总空间为:

183mb + 5b + 2b

请注意,显示的大小不包括容器使用的所有磁盘空间。 目前没有包括在内的东西; ——卷 ——交换 ——检查点 —用于容器生成日志文件的磁盘空间

https://github.com/docker/docker.github.io/issues/1520#issuecomment-305179362