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.
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'
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
.
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"]'
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.
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
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"
]
}
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
}
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]
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', =)
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>
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"]'
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
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
Si l'outil d'analyse JSON, jq
est disponible
wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O - | \
jq -r .[].name
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