回答

2

您可以使用「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 
+0

您提到「註冊表API」。你的意思是什麼?你有鏈接嗎? –

+1

https://docs.docker.com/registry/spec/api/。 Google容器註冊表實現了相同的其他API,但擴展了列表圖像標記API,因此它返回了上面鏈接定義的超級信息集,這就是爲什麼您可以遞歸列出圖像的原因。 – Wei

+0

我還沒有嘗試過你的腳本,如果這是顯而易見的,我提前道歉,但爲了讓搜索工作,我不得不這樣做:「gcloud docker - 搜索/」 –