web-dev-qa-db-fra.com

Comment répertorier toutes les balises d'une image Docker sur un registre distant?

J'aimerais savoir comment répertorier toutes les balises d'une image Docker sur un registre Docker distant ( tutum dans notre cas mais je ne suppose pas que cela compte) à l'aide de la CLI (préférée) ou curl? De préférence, sans extraire toutes les versions du registre distant, je souhaite simplement répertorier les balises.

101
Johan

J'ai eu la réponse de ici . Merci beaucoup! :)

Juste une ligne de script: (trouver toutes les balises de 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 Merci pour le conseil de @ degelf . Voici le script Shell.

#!/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}"

Vous pouvez simplement créer un nouveau nom de fichier, dockertags, sous/usr/local/bin (ou ajouter un env. PATH à votre .bashrc/.zshrc) et y insérer ce code. Ajoutez ensuite les autorisations exécutables (chmod +x dockertags).

Usage:

dockertags ubuntu ---> liste toutes les balises de ubuntu

dockertags php Apache ---> liste tous les tags php php contenant 'Apache' 

87
Vi.Ci

A partir de Docker Registry V2, une simple GET suffit:

GET /v2/<name>/tags/list

Voir docs pour plus.

50
Yan Foto

J'ai réussi à le faire fonctionner avec curl:

curl -u <username>:<password> https://tutum.co/v1/repositories/<username>/<image_name>/tags

Notez que image_name ne doit pas contenir les détails de l'utilisateur, etc. Par exemple, si vous insérez une image nommée tutum.co/username/x, alors image_name doit être x.

15
Johan

Si vous souhaitez utiliser l'API docker registry v2, elle répertorie les balises par pages. Pour répertorier toutes les balises d’une image, vous pouvez ajouter un paramètre page_size de grande taille à l’URL,.

curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/centos/tags?page_size=1024'|jq '."results"[]["name"]'
14
0xCC

L'API Docker V2 nécessite un jeton porteur OAuth avec les revendications appropriées. À mon avis, la documentation officielle est plutôt vague sur le sujet. Pour que les autres ne ressentent pas la même douleur que moi, je propose la fonction docker-tags ci-dessous.

La version la plus récente de docker-tags se trouve dans mon GitHubGist: "Répertorier les tags d’image Docker à l’aide de bash"

La fonction docker-tags a une dépendance sur jq . Si vous jouez avec JSON, vous l'avez probablement déjà.

#!/usr/bin/env bash
docker-tags() {
    arr=("$@")

    for item in "${arr[@]}";
    do
        tokenUri="https://auth.docker.io/token"
        data=("service=registry.docker.io" "scope=repository:$item:pull")
        token="$(curl --silent --get --data-urlencode ${data[0]} --data-urlencode ${data[1]} $tokenUri | jq --raw-output '.token')"
        listUri="https://registry-1.docker.io/v2/$item/tags/list"
        authz="Authorization: Bearer $token"
        result="$(curl --silent --get -H "Accept: application/json" -H "Authorization: Bearer $token" $listUri | jq --raw-output '.')"
        echo $result
    done
}

Exemple

docker-tags "Microsoft/nanoserver" "Microsoft/dotnet" "library/mongo" "library/redis"

Certes, docker-tags fait plusieurs hypothèses. Plus précisément, les paramètres de la demande OAuth sont principalement codés en dur. Une mise en œuvre plus ambitieuse créerait une requête non authentifiée auprès du registre et dériverait les paramètres OAuth de la réponse non authentifiée.

5
RobV8R

Voir Utilitaire CLI: https://www.npmjs.com/package/docker-browse

Permet l'énumération des tags et des images.

docker-browse tags <image> listera toutes les balises pour l'image. par exemple. docker-browse tags library/Alpine

docker-browse images listera toutes les images du registre. Non disponible actuellement pour index.docker.io.

Vous pouvez le connecter à n’importe quel registre, y compris le privé, à condition qu’il prenne en charge Docker Registry HTTP API V2

3
Alex Courtis

En me basant sur la réponse de Yan Foto (le v2 api ), j'ai créé un script Python simple pour répertorier les balises d'une image donnée .

Usage:

./docker-registry-list.py Alpine

Sortie:

{
  "name": "library/Alpine",
  "tags": [
    "2.6",
    "2.7",
    "3.1",
    "3.2",
    "3.3",
    "3.4",
    "3.5",
    "3.6",
    "3.7",
    "Edge",
    "latest"
  ]
}
3
Alex Forbes

Voici un script Powershell que j'ai écrit pour Windows. Gère les pensions v1 et v2:

Get-DockerImageVersions.ps1:

param (
  [Parameter (Mandatory=$true)]$ImageName,
  [Parameter (Mandatory=$false)]$RegistryURL
)

if (!$RegistryURL) 
{
  $RegistryURL = "https://registry.hub.docker.com/v1/repositories"
}

$list = ""
if ($RegistryURL -like "*v2*") 
{
  $list = "/list"
}

$URL = "$RegistryURL/$ImageName/tags$list"

write-debug $URL
$resp = Invoke-WebRequest -UseBasicParsing $URL | ConvertFrom-Json

if ($RegistryURL -like "*v2*") 
{
  $tags = $resp | select tags
  $tags.tags
} else {
  $tags = $resp | select name
  $tags.name
}
1
Steve W

Vous pouvez également utiliser cette note:

# vim /usr/sbin/docker-tags 

& Ajouter la suite (telle quelle):

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

Enfin, essayez par:

$ docker-tags testexampleidontexist
   [-] No Image Found with name => [ testexampleidontexist ]

$ docker search ubuntu

$ docker-tags teamrock/ubuntu
   latest

[J'espère que vous êtes au courant de $ & # avant d'exécuter une commande]

1
Mr. Pundir
curl -u <username>:<password> https://$your_registry/v2/$image_name/tags/list -s -o - | \
    tr -d '{' | tr -d '}' | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | \
    awk -F: '{print $3}' | sed -e 's/,/\n/g'

Vous pouvez l'utiliser si votre env n'a pas de 'jq', =)

1
SwenChan

L'API de registre Docker a un point de terminaison sur liste toutes les balises

On dirait que Tutum a un extrémité similaire ainsi qu'un moyen d'accéder via tutum-cli .

Avec le tutum-cli, essayez ce qui suit:

tutum tag list <uuid>
1
Alex

Obtenir toutes les balises de Docker Hub: cette commande utilise la ligne de commande JSON processeur jq pour sélectionner les noms de balises de la JSON renvoyée par le registre de Docker Hub (les guillemets sont supprimés avec tr). Remplacez library par le nom d'utilisateur Docker Hub, debian par le nom de l'image:

curl -s 'https://registry.hub.docker.com/v2/repositories/library/debian/tags/' | jq -r '."results"[]["name"]'
1
jamlee

Vous pouvez y parvenir en exécutant sur un terminal:

curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq . | grep name

De plus, si vous n'avez pas jq, vous devez l'installer en

Sudo apt-get install jq
0
laynusfloyd

J'ai fait cette chose lorsque je dois implémenter une tâche dans laquelle si l'utilisateur tape en quelque sorte la mauvaise balise, nous devons donner la liste de toutes les balises présentes dans le référentiel (repo Docker) présent dans le registre ..__ avoir le code dans le script de lot.

<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>

Donc, en cela, nous pouvons donner des arguments pour sortir un fichier batch comme: 

Dockerfile Java version7 

0
Vatsal Garg

Si l'outil d'analyse JSON, jq est disponible

wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O - | \
    jq -r .[].name
0
sigjuice

Pour afficher toutes les balises disponibles dans un navigateur:

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

c'est-à-dire https://hub.docker.com/r/localstack/localstack/tags

Ou, vous pouvez obtenir une réponse JSON en utilisant ce noeud final:

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

0
thedanotto