5

我必须列出在某个项目中发布的 Docker 容器镜像,但我无法使用gcloudCLI 工具找到合适的 API。这可能吗?

是否有任何其他解决方案可以在我的 Google 项目中列出此私有容器注册表中的容器映像?

4

2 回答 2

7

您可以使用“gcloud docker search <hostname>/<your-project-id>”列出图像。主机名应该是“gcr.io”或“us.gcr.io”或任何您的图像创建下。请注意,您必须遍历所有可能的主机才能找到项目下的所有图像。但是,此方法仅列出存储库,不会列出标签或清单。

您也可以直接使用注册表 API 来执行此操作,它将返回更多信息。使用以下脚本作为入门指南:

#!/bin/bash

HOSTS="gcr.io us.gcr.io eu.gcr.io asia.gcr.io"
PROJECT=your-project-id

function search_gcr() {
  local fullpath=""
  local host=$1
  local project=$2
  if [[ -n $3 ]]; then
    fullpath=${3}
  fi
  local result=$(curl -u _token:$(gcloud auth print-access-token) \
    --fail --silent --show-error \
    https://${host}/v2/${project}${fullpath}/tags/list)
  if [[ -z $result ]]; then
    printf ""
  else
    printf $result
  fi
}

function recursive_search_gcr() {
  local host=$1
  local project=$2
  local repository=$3
  local result=$(search_gcr $host $project ${repository})
  local returnVal=$?
  if [[ -z $result ]]; then
    echo Not able to curl: https://${host}/v2/${project}${fullpath}/tags/list
    return
  fi
  local children="$(python - <<EOF
import json
import sys
obj = json.loads('$result')
if 'child' in obj:
  print ' '.join(obj['child'])
else:
  print ''
EOF
    )"

  for child in $children;
  do
    recursive_search_gcr $host $project ${repository}/${child}
  done
  local manifests="$(python - <<EOF
import json
import sys
obj = json.loads('$result')
if 'manifest' in obj:
  print ' '.join(obj['manifest'])
else:
  print ''
EOF
    )"
  echo Repository ${host}/${project}$repository:
  echo "    manifests:"
    for manifest in $manifests
    do
      echo "        "$manifest
    done
    echo

  local tags="$(python - <<EOF
import json
import sys
obj = json.loads('$result')
if 'tags' in obj:
  print ' '.join(obj['tags'])
else:
  print ''
EOF
    )"
  echo "    tags:"
  for tag in $tags
  do
    echo "        "$tag
  done
  echo
}

for HOST in $HOSTS;
do
  recursive_search_gcr $HOST $PROJECT
done
于 2016-03-15T21:22:03.297 回答
1

使用“gcloud container images”命令在 Google Container Registry 中查找图像并与之交互。例如,这将列出名为“my-project”的项目中的所有容器:

gcloud container images list --repository=gcr.io/my-project

完整文档位于https://cloud.google.com/container-registry/docs/managing

于 2019-03-09T06:23:06.723 回答