首页 > 解决方案 > 如何在 docker pull 之前从不安全的注册表中检查图像的压缩大小?

问题描述

有一些方法可以在从 Docker Hub 拉取之前检查压缩图像的大小,但是为了对不安全/域注册表做同样的事情,我如何在拉取之前检查下载大小?

拉动时,我可以看到像这样下载的每一层的大小,我可以总结一下总大小。

7595c8c21622: Already exists
d13af8ca898f: Already exists
70799171ddba: Already exists
b6c12202c5ef: Already exists
ef50ae158fa8: Downloading [===============>                                   ]  74.18MB/239.3MB
e5665f29b73a: Downloading [=>                                                 ]  95.26MB/2.741GB
780c121f1da3: Downloading [========>                                          ]  75.27MB/462.5MB
5fc49bebd483: Waiting
592ff9f385a7: Waiting
80a3934684b4: Waiting
b523362dbfaa: Waiting
3bf96686ba27: Waiting
dd64f3b98c5f: Waiting
937238fb3569: Waiting
c39efc826c40: Waiting

但我想事先知道总下载大小是多少。

标签: docker

解决方案


Docker 为注册表中的每个映像推送一个清单文件,其中包含所有下载客户端使用的校验和、大小和其他信息,以拉取层。

给定您的注册表/图像名称,您可以inspect在清单文件中总结每个层的大小以获得总下载大小。

首先,启用 Docker 的实验性 CLI 功能。

  1. 临时启用:

    export DOCKER_CLI_EXPERIMENTAL=enabled

  2. 使其永久化:

    加入"experimental": "enabled"_~/.docker/config.json

检查尺寸:

docker manifest inspect --insecure -v <registry_or_domain>/<image_name> | grep size | awk -F ':' '{sum+=$NF} END {print sum}' | xargs printf "%f\n" | numfmt --to=iec

printf将大小的科学记数法(如 3e+09)格式化为numfmt可以解析的浮点数。


推荐阅读