1

为了弄清楚是否有任何我们经常依赖和缓存的 Docker 镜像,我试图找出一种方法来列出所有缓存的公共依赖项:由 Harbor 拉取和缓存的 Docker Hub 镜像。

我们的想法是,我们想要列出任何没有明确支持特定平台(如 ARM64)的镜像,以便了解我们使用 Apple Silicon 机器和 Docker for Mac 是否安全。

我浏览了内部 API 文档中列出的 Harbor API 端点,但无论具体项目如何,都找不到任何专门列出缓存的公共图像的端点。可以理解,可能存在隐私问题,但我认为通过 Harbor 提取图像不一定与项目相关。

也许这就是我的误解。或者这可能是 docker (compose) pull 应该在后台提供的东西,给出从特定平台拉取的图像列表。

4

1 回答 1

0

我的聪明同事 John Meyers 帮我解决了这个问题,他使用这个命令得到了一个很好的列表:

curl -X GET -u 'your-username:your-password!' https://harbor.vnerd.com/v2/_catalog

看起来您只能获取注册表/本地中已被拉下的标签。它会为您提供代理项目中所有内容的列表,这应该是您关心的所有内容?

他跟着这个脚本:

假设是这样,一些谷歌搜索将这些废话拼凑在一起,从注册表中获取“胖清单”并寻找 arm64 架构。

#!/bin/sh

images=($@)

for image in "${images[@]}"; do
    scope="scope=repository:${image}:pull&"
    token=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&${scope}" | jq -r '.token')

    echo ${image}
    if curl -H "Accept: application/vnd.docker.distribution.manifest.list.v2+json" \
                  -H "Authorization: Bearer $token" \
                  -s "https://registry-1.docker.io/v2/${image}/manifests/latest" | jq -r '.manifests|.[] | select(.platform.architecture | ascii_downcase =="arm")' &> /dev/null; then
        echo "Has an ARM image"
    else
        echo "Bad news"
    fi
done

让我们发现许多 Confluent (Kafka) 映像目前还没有 ARM64 版本,这是一个令人担忧的问题。Helm 同上。

confluentinc/cp-kafka
confluentinc/cp-kafka-connect-base
confluentinc/cp-schema-registry
confluentinc/cp-server
confluentinc/cp-zookeeper
cypress/base
devth/helm
于 2021-09-21T21:12:34.290 回答