2016-02-12 38 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