2016-02-12 76 views
3

我想通過其HTTP界面列出Docker映像官方Docker集線器的標記,但我有點困惑。因爲似乎他們的兩個版本:通過HTTP API列出Docker集線器上的Docker映像的標記

我設法通過發送一個GET請求到這個端點,讓他們:與基本身份驗證憑據一起https://index.docker.io/v1/repositories/{my-namespace}/{my-repository}/tags

我不確定是否有正確的一個,但我應該使用哪一個?

回答

2

Docker做了一個巨大的重構註冊表:註冊表v2.0。

隨着這個全新的版本,來一個新的認證系統,所以v1.0的基本身份驗證將不再工作。

您可以找到有關V2.0 AUTH這裏更多的細節:https://docs.docker.com/v1.6/registry/spec/auth/token/

隨着V1.0已過時,你應該向前註冊表V2.0。

1

這裏是一個bash腳本來做到這一點。將其保存到名爲docker-hub-tags-list的文件中,然後像這樣運行它:docker-hub-tags-list markriggins/todowrangler

但是,您需要首先通過docker login登錄。你將需要安裝json工具http://trentm.com/json/這是一個非常酷的工具,用於解析命令行上的json

#!/usr/bin/env bash 

REPOSITORY=${REPOSITORY:-$1} 
REGISTRY=${REGISTRY:-docker.io} 

# 
# Docker funcs 
# 
    d__docker_relative_repository_name_from_URL() { 
     # given $REGISTRY/repo/path:tag, return the repo/path 
     set +o pipefail 
     echo ${1-} | sed -e "s|^$REGISTRY/||" | cut -d: -f1 
    } 

    d___version_sort() { 
     # read stdin, sort by version number descending, and write stdout 
     # assumes X.Y.Z version numbers 

     # this will sort tags like pr-3001, pr-3002 to the END of the list 
     # and tags like 2.1.4 BEFORE 2.1.4-gitsha 

     sort -s -t- -k 2,2nr | sort -t. -s -k 1,1nr -k 2,2nr -k 3,3nr -k 4,4nr 
    } 

    d__basic_auth() { 
     # 
     # read basic auth credentials from `docker login` 
     # 
     cat ~/.docker/config.json | json '.auths["https://index.docker.io/v1/"].auth' 
    } 


    d__registry__tags_list() { 

     # return a list of available tags for the given repository sorted 
     # by version number, descending 
     # 
     # Get tags list from dockerhub using v2 api and an auth.docker token 


     local rel_repository=$(d__docker_relative_repository_name_from_URL ${1}) 
     [ -z "$rel_repository" ] && return 

     local TOKEN=$(curl -s -H "Authorization: Basic $(d__basic_auth)" \ 
         -H 'Accept: application/json' \ 
         "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$rel_repository:pull" | json .token) 


     curl -s -H "Authorization: Bearer $TOKEN" -H "Accept: application/json" \ 
       "https://index.docker.io/v2/$rel_repository/tags/list" | 
       json .tags | 
       json -a | 
       d___version_sort 
    } 


d__registry__tags_list $REPOSITORY