通过HTTP API在Docker集线器上列出Docker镜像的标签

我想通过它的HTTP接口列出一个Docker镜像官方docker集线器的标签,但是我有点困惑。 由于它们有两个版本:

  • https://docs.docker.com/v1.6/reference/api/registry_api/
  • https://docs.docker.com/v1.6/registry/spec/api/

我设法让他们通过发送GET请求到这个端点: https://index.docker.io/v1/repositories/{my-namespace}/{my-repository}/tags ://index.docker.io/v1/repositories/{my-namespace}/{my-repository}/ https://index.docker.io/v1/repositories/{my-namespace}/{my-repository}/tags以及基本的authentication凭证。

我不确定是否有一个正确的,但我应该使用哪一个?

Docker做了一个巨大的重构registry:v2.0registry。

随着这个全新的版本,来一个新的authentication系统,所以v1.0的基本身份validation将不再工作。

你可以在这里find关于v2.0 auth的更多细节: https : //docs.docker.com/v1.6/registry/spec/auth/token/

由于v1.0已被弃用,您应该转移到registryv2.0。

这是一个bash脚本来做到这一点。 将其保存到一个名为docker-hub-tags-list的文件中,并像这样运行它: docker-hub-tags-list markriggins/todowrangler

但是您需要先通过docker login 。 你将需要安装json工具http://trentm.com/json/这是一个非常酷的工具,在命令行上parsingjson

 #!/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 XYZ 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