How can I list all tags for a Docker image on a remote registry?

前端 未结 19 1885
时光取名叫无心
时光取名叫无心 2020-12-04 04:46

How can I list all tags of a Docker image on a remote Docker registry using the CLI (preferred) or curl?

Preferably without pulling all versions from the remote regi

相关标签:
19条回答
  • 2020-12-04 05:04

    You can also use this scrap :

    # vim /usr/sbin/docker-tags 
    

    & Append Following (as it is):

    #!/bin/bash
    im="$1"
    [[ -z "$im" ]] && { echo -e '\e[31m[-]\e[39m Where is the image name ??' ; exit ; }
    [[ -z "$(echo "$im"| grep -o '/')" ]] && { link="https://hub.docker.com/r/library/$im/tags/" ; } || { link="https://hub.docker.com/r/$im/tags/" ; }
    resp="$(curl -sL "$link")"
    err="$(echo "$resp" | grep -o 'Page Not Found')"
    if [[ ! -z "$err" ]] ; then
        echo -e "\e[31m[-]\e[39m No Image Found with name => [ \e[32m$im\e[39m ]"
        exit
    else
        tags="$(echo "$resp"|sed  -e 's|}|\n|g' -e 's|{|\n|g'|grep '"result"'|sed -e 's|,|\n|g'|cut -d '[' -f2|cut -d ']' -f1|sed  '/"tags":/d'|sed -e 's|"||g')"
        echo -e "\e[32m$tags\e[39m"
    fi
    

    Make it Executable :

    # chmod 755 /usr/sbin/docker-tags
    

    Then Finally Try By :

    $ docker-tags testexampleidontexist
       [-] No Image Found with name => [ testexampleidontexist ]
    
    $ docker search ubuntu
    
    $ docker-tags teamrock/ubuntu
       latest
    

    [ Hope you are aware of $ & # before running any command ]

    0 讨论(0)
  • 2020-12-04 05:04

    I have done this thing when I have to implement a task in which if user somehow type the wrong tag then we have to give the list of all the tag present in the repo(Docker repo) present in the register. So I have code in batch Script.

    <html>
    <pre style="background-color:#bcbbbb;">
    @echo off
    
    docker login --username=xxxx --password=xxxx
    docker pull %1:%2
    
    IF NOT %ERRORLEVEL%==0 (
    echo "Specified Version is Not Found "
    echo "Available Version for this image is :"
    for /f %%i in (' curl -s -H "Content-Type:application/json" -X POST -d "{\"username\":\"user\",\"password\":\"password\"}" https://hub.docker.com/v2/users/login ^|jq -r .token ') do set TOKEN=%%i
    curl -sH "Authorization: JWT %TOKEN%" "https://hub.docker.com/v2/repositories/%1/tags/" | jq .results[].name
    )
    </pre>
    </html>
    

    So in this we can give arguments to out batch file like:

    Dockerfile java version7 

    0 讨论(0)
  • 2020-12-04 05:08

    The Docker Registry API has an endpoint to list all tags.

    Looks like Tutum has a similar endpoint, as well as a way to access via tutum-cli.

    With the tutum-cli, try the following:

    tutum tag list <uuid>
    
    0 讨论(0)
  • 2020-12-04 05:11

    I got the answer from here . Thanks a lot! :)

    Just one-line-script:(find all the tags of debian)

    wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O -  | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n'  | awk -F: '{print $3}'
    

    UPDATE Thanks for @degelf's advice. Here is the shell script.

    #!/bin/bash
    
    if [ $# -lt 1 ]
    then
    cat << HELP
    
    dockertags  --  list all tags for a Docker image on a remote registry.
    
    EXAMPLE: 
        - list all tags for ubuntu:
           dockertags ubuntu
    
        - list all php tags containing apache:
           dockertags php apache
    
    HELP
    fi
    
    image="$1"
    tags=`wget -q https://registry.hub.docker.com/v1/repositories/${image}/tags -O -  | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n'  | awk -F: '{print $3}'`
    
    if [ -n "$2" ]
    then
        tags=` echo "${tags}" | grep "$2" `
    fi
    
    echo "${tags}"
    

    You can just create a new file name, dockertags, under /usr/local/bin (or add a PATH env to your .bashrc/.zshrc), and put that code in it. Then add the executable permissions(chmod +x dockertags).

    Usage:

    dockertags ubuntu ---> list all tags of ubuntu

    dockertags php apache ---> list all php tags php containing 'apache'

    0 讨论(0)
  • 2020-12-04 05:11

    To view all available tags in a browser:

    https://registry.hub.docker.com/v1/repositories/<username>/<image_name>/tags

    i.e. https://hub.docker.com/r/localstack/localstack/tags

    Or, you can get a json response using this endpoint:

    https://registry.hub.docker.com/v1/repositories/localstack/localstack/tags

    0 讨论(0)
  • 2020-12-04 05:11

    You can list all the tags with skopeo and jq for json parsing through cli.

    skopeo --override-os linux inspect docker://httpd | jq '.RepoTags'
    
    [
      "2-alpine",
      "2.2-alpine",
      "2.2.29",
      "2.2.31-alpine",
      "2.2.31",
      "2.2.32-alpine",
      "2.2.32",
      "2.2.34-alpine",
      "2.2.34",
      "2.2",
      "2.4-alpine",
      "2.4.10",
      "2.4.12",
      "2.4.16",
      "2.4.17",
      "2.4.18",
      "2.4.20",
      "2.4.23-alpine",
      "2.4.23",
      "2.4.25-alpine",
      "2.4.25",
      "2.4.27-alpine",
      "2.4.27",
      "2.4.28-alpine",
      "2.4.28",
      "2.4.29-alpine",
      "2.4.29",
      "2.4.32-alpine",
      "2.4.32",
      "2.4.33-alpine",
      "2.4.33",
      "2.4.34-alpine",
      "2.4.34",
      "2.4.35-alpine",
      "2.4.35",
      "2.4.37-alpine",
      "2.4.37",
      "2.4.38-alpine",
      "2.4.38",
      "2.4.39-alpine",
      "2.4.39",
      "2.4.41-alpine",
      "2.4.41",
      "2.4.43-alpine",
      "2.4.43",
      "2.4",
      "2",
      "alpine",
      "latest"
    ]
    

    For external registries:

    skopeo --override-os linux inspect --creds username:password docker://<registry-url>/<repo>/<image> | jq '.RepoTags'
    

    Note: --override-os linux is only needed if you are not running on a linux host. For example, you'll have better results with it if you are on MacOS.

    0 讨论(0)
提交回复
热议问题