什么是Google容器注册表的gcloud API

Gab*_*vay 5 docker google-cloud-platform gcloud google-container-registry container-image

我必须列出在某个项目中发布的Docker容器映像,但是我找不到使用gcloudCLI工具的适当API .这可能吗?

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

Wei*_*Wei 5

您可以使用"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
Run Code Online (Sandbox Code Playgroud)

  • https://docs.docker.com/registry/spec/api/.Google容器注册表实现了相同的其他API,但扩展了列表图像标记API,因此它返回了上述链接定义的超级信息集,这就是您可以递归列出图像的原因. (3认同)