【问题标题】:Bintray docker repository storageBintray docker 存储库存储
【发布时间】:2021-01-20 05:24:41
【问题描述】:

在 Bintray 上,我发现我有一个私有 docker 存储库,占用了大量空间:

Account usage by repository

然后我开始做一些整理工作,只保留了我所有图像的最后 3 个标签。然而,这并没有太大帮助。删除所有这些旧标签后,存储根本没有变化。

我在这里得到了这个 API 端点:https://bintray.com/docs/api/#_get_package_files 来估计包文件的大小:

for img in $(cat images) ; do curl -s -XGET -u "user:pass" https://bintray.com/api/v1/packages/my-org/internal-docker/$img/files | python -m json.tool | jq '.[] | .size' | awk '{ sum += $1 } END { print sum }' ; done

将所有这些加起来得到 63723101568 字节,60GB。

知道其他 310GB 在哪里吗?

请注意,即使 3 个标签彼此完全不同,我也会得到该数字的 3 倍,即 180GB。但是 375GB 还在。

【问题讨论】:

  • 也使用 POST /usage/package_usage/:subject/:repo/:image_name 并获取 storage_bytes 产生相同的结果。

标签: bintray jfrog


【解决方案1】:

你从哪里得到数组'images'?

您不是针对整个列表,而是针对单个文件。

您的列表可能未包含此 repo 中的所有图像。

检查以确保您已遍历所有图像子文件夹。

【讨论】:

  • curl -ns -u user:pass https://mycompany-docker-internal-docker.bintray.io/v2/_catalog | python -m json.tool | jq '.repositories | .[]' | tr -d '"' | tr '/' ':' > image 是图像列表,它与在线看到的数字相匹配。 files 端点为我提供了所有 docker 层的所有文件及其大小,然后我对其求和。
  • 当我运行上述命令时,我得到的是 repos 列表而不是图像。我可以看到您还使用命令 jq '.repositories' 来查找它,这表明您正在从存储库标签中提取此数据。这不是 docker repo 中所有图像的列表。因此,您的源数据是错误的,并且您的文件大小不正确。起初它也让我感到困惑,但是当我意识到很多存储库都有同名的图像时,这就是为什么你最终只得到部分数据的原因。
  • 我认为 bintray 只是映射了 docker 镜像的存储库的概念,其中每个镜像都可能有许多包(标签)。如果我使用curl -ns -u user:pass https://bintray.com/api/v1/repos/mycompany/internal-docker/packages | jq '.[] | .name',我得到的“存储库”会更少,而另一个命令与我在 WebGUI 上看到的相同编号(我所有的 docker 图像)匹配。
【解决方案2】:

一段时间后,something changed in the backend storage

我询问了他们的支持(您必须在登录 Bintary 时点击Feedback),他们正在检查是否有任何内务处理,或者仅在我向他们投诉后才完成。

如果我从他们那里听到更多消息,我会更新。

【讨论】: