显示所有 docker 卷的大小而不安装它们

mcE*_*nge 9 docker docker-volume

如何列出所有 Docker 卷及其各自的大小。

docker volume inspect $(docker volume ls)
Run Code Online (Sandbox Code Playgroud)

提供有关所有卷但每个卷大小的信息。

最好,我想检查大小,而不必将它们安装到某个容器中,因为我有超过 20 个卷,其中包含一些神秘的“散列”卷名称,可能会产生一些错误,我正在尝试查找这些错误。

lar*_*sks 6

使用默认overlay存储驱动程序,Docker 卷没有“大小”(所有卷共享同一文件系统上的空间)。计算卷消耗的空间的唯一方法是迭代其中的所有文件并将它们各自的大小相加。有几种方法可以做到这一点。

我认为最简单的就是安装卷。例如:

docker volume ls -q |
while read vol; do 
  echo "=== $vol ==="
  docker run --rm -v "$vol:/data" alpine du -sh /data
done
Run Code Online (Sandbox Code Playgroud)

如果你确实想避免docker run,你可以这样做(请注意,我们使用jq来解析 的 JSON 输出docker volume inspect):

docker volume ls -q |
while read vol; do
  mount=$(docker volume inspect "$vol" | jq -r '.[0].Mountpoint')
  echo "=== $vol ==="
  sudo du -sh "$mount"
done
Run Code Online (Sandbox Code Playgroud)

我更喜欢第一个解决方案,因为即使 docker 守护进程在远程主机或虚拟机上运行,​​它也能工作。例如,上述操作在 Windows 或 MacOS 上都会失败,因为在这些系统上,Docker 正在运行虚拟机,因此运行时卷路径在主机上不可见du


col*_*yre 5

您可以使用 的详细输出docker system df。这为您提供有关所有空间使用情况以及卷的详细信息。

$ docker system df --help

Usage:  docker system df [OPTIONS]

Show docker disk usage

Options:
      --format string   Pretty-print images using a Go template
  -v, --verbose         Show detailed information on space usage
Run Code Online (Sandbox Code Playgroud)

即只需docker system df -v在主机上运行,​​docker 就会方便地为您计算大小。