有没有办法确定我的macOS机器上的docker卷的大小?

92dk7w1h  于 2023-08-03  发布在  Docker
关注(0)|答案(6)|浏览(119)

我知道docker volume lsdocker inspect -s,但前者不显示大小信息,而后者,即使它有一个--size选项,也会忽略它的卷。
我是不是漏掉了什么?

oxiaedzo

oxiaedzo2#

这一点:

docker volume inspect --format '{{ .Mountpoint }}' volumeNameHere

字符串
将返回主机上卷的装载点。所以,要得到尺寸,只需要做:

du -sh $(docker volume inspect --format '{{ .Mountpoint }}' volumeNameHere)

jtjikinw

jtjikinw3#

基于Federkun的回答:

docker run --rm -v /:/vm-root alpine du -sH /vm-root/$(docker volume inspect --format '{{ .Mountpoint }}' volumeNameHere)

字符串

xj3cbfub

xj3cbfub4#

Federkun回答的第一步对我很有效,它返回了这样的内容:

/var/lib/docker/volumes/f4678f...b87/_data

字符串
但当我试着

du -sh $(docker volume inspect --format '{{ .Mountpoint }}' volumeNameHere)


它返回了一个

du: /var/lib/docker/volumes/f4678f...b87/_data: No such file or directory


事实证明,Docker在macOS上的工作方式不同。根据this answer,在运行du -sh命令之前,我必须首先将screen插入MacOS使用的Docker虚拟机。您可以通过运行

sudo screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty


然后你就可以跑了

du -sh /var/lib/docker/volumes/f4678f...


以最终获得卷大小。

am46iovg

am46iovg5#

正如@MikeWu的回答所指出的,可以通过以下方式看到Docker Volumes的大小:

docker system df -v

字符串
但是必须滚动一点以找到区段Local Volumes space usage:。使用管道sed命令,如:

docker system df -v | sed -n '/VOLUME NAME/,/^ *$/p'


将有助于提高可读性并减少输出到感兴趣的部分-通过仅从VOLUME NAME打印直到第一个空行。

mjqavswn

mjqavswn6#

您可以使用Go模板来格式化DiskUsageContext

docker system df --verbose --format '{{ range .Volumes }}{{ .Name }} {{ .Size }}\n{{ end }}'

字符串
如果你想检查一个特定的卷,并将人类可读的值转换回字节,你可以使用awk

docker system df --verbose --format '{{ range .Volumes }}{{ .Name }} {{ .Size }}\n{{ end }}' | awk -v "volume_name=VOLUME_NAME"  'BEGIN { sizes["k"] = 1024; sizes["M"] = 1024^2; sizes["G"] = 1024^3; sizes[""] = 1; } match($0, "^" volume_name " ([0-9.]+)([kMG]?)B$", arr) { printf("%d\n", arr[1] * sizes[arr[2]]); }'

相关问题