MISE À JOUR Merci pour les conseils 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 envoi PATH à votre .bashrc/ .zshrc), et y mettre ce code. Ajoutez ensuite les autorisations exécutables ( chmod +x dockertags).
Usage:
dockertags ubuntu ---> liste de toutes les balises de ubuntu
dockertags php apache ---> liste de toutes les balises php php contenant 'apache'
Vous pouvez envelopper le tout dans echo [backtick] ...[backtick] pour le condenser en une seule ligne. Et / ou remplacez "debian" par $ 1 et placez-le dans un script appelé "dockertags" sous / usr / local / bin. Ensuite, avant le backtick de fermeture, vous pouvez ajouter | grep $ 2. Ensuite, chmod + x it, et ensuite vous pouvez aller "dockertags php apache" pour voir toutes les balises php contenant apache.
sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'est beaucoup plus propretr -d '[]" '
William Pursell
1
J'ai modifié pour utiliser le deuxième argument positionnel comme nom d'utilisateur: mot de passe afin que je puisse changer wget pour curl et utiliser l' userauth="-u ${2}"autorisation ${userauth}(s'il est vide, pas de bascule ou de paramètres). Cela pourrait aider toute personne utilisant des
Sur la base des informations de la sous-section Balises dans la documentation , cet GET semble nécessiter une autorisation, donc l'API v1 + sedsemble en fait plus simple à utiliser pour une vérification rapide ...
akavel
3
Si vous obtenez une erreur "non autorisée", consultez ma réponse alternative . Aucune infraction à la personne qui a publié la réponse originale. J'ai dû prendre des mesures supplémentaires pour que la réponse ci-dessus fonctionne et je voulais aider les autres.
RobV8R
23
Si vous souhaitez utiliser l'API Docker Registry v2, il répertorie les balises par pages. Pour lister toutes les balises d'une image, vous voudrez peut-être ajouter un grand paramètre page_size à l'url, par exemple
Docker Hub semble limiter page_size à un maximum effectif de 100.
Shane
2
@Shane Oh vraiment? Je n'ai pas rencontré d'image avec autant de pages. Une URL aime-t-elle le https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101travail?
L'API Docker V2 nécessite un jeton de support OAuth avec les revendications appropriées. À mon avis, la documentation officielle est assez vague sur le sujet. Pour que les autres ne subissent pas la même douleur que moi, j'offre la docker-tagsfonction ci-dessous .
Certes, docker-tagsfait plusieurs hypothèses. Plus précisément, les paramètres de demande OAuth sont pour la plupart codés en dur. Une mise en œuvre plus ambitieuse ferait une demande non authentifiée au registre et dériverait les paramètres OAuth de la réponse non authentifiée.
Notez que cela image_namene devrait pas contenir de détails sur l'utilisateur, etc. Par exemple, si vous poussez l'image nommée, tutum.co/username/xelle image_namedevrait l'être x.
Quel est ce site tutum.co dont vous dites que je devrais leur donner mon identifiant et mon mot de passe dockerhub?
Nakilon
1
@Nakilon Lorsque j'ai écrit cette réponse, il y a plusieurs années, Tutum était un service qui fournissait un registre Docker privé. Et je ne "leur donne" pas mon mot de passe, je m'authentifie auprès de leur service en utilisant l'authentification de base HTTP standard via https.
Johan
Tutum n'existe plus. Pouvez-vous mettre à jour votre réponse afin que les gens n'envoient pas accidentellement leurs informations d'identification à la personne qui possède ce domaine maintenant?
Obtenir toutes les balises de Docker Hub: cette commande utilise le JSONprocesseur de ligne de commande jqpour sélectionner les noms de balise parmi ceux JSONrenvoyés par le Docker Hub Registry (les guillemets sont supprimés avec tr). Remplacez la bibliothèque par le nom d'utilisateur Docker Hub, debian par le nom de l'image:
en utilisant la version 1:curl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
danilo
1
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 (Docker repo) présentes dans le registre. J'ai donc du code dans le script batch.
<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>
Ainsi, nous pouvons donner des arguments pour sortir le fichier batch comme:
Je ne pense pas que cela fonctionne pour les images de registre. Je reçois juste un "identifiant '<id>' ne correspondant à aucun service, nœud ou nodecluster".
Johan
1
Dans powershell 5.1, j'ai un simple script list_docker_image_tags.ps1 comme celui-ci:
Si les gens veulent lire les balises du registre RedHat à, https://registry.redhat.io/v2les étapes sont les suivantes:
# example nodejs-12 image
IMAGE_STREAM=nodejs-12
REDHAT_REGISTRY_API="https://registry.redhat.io/v2/rhel8/$IMAGE_STREAM"# Get an oAuth token based on a service account username and password https://access.redhat.com/articles/3560571
TOKEN=$(curl --silent -u "$REGISTRY_USER":"$REGISTRY_PASSWORD""https://sso.redhat.com/auth/realms/rhcc/protocol/redhat-docker-v2/auth?service=docker-registry&client_id=curl&scope=repository:rhel:pull"| jq --raw-output '.token')# Grab the tags
wget -q --header="Accept: application/json"--header="Authorization: Bearer $TOKEN"-O -"$REDHAT_REGISTRY_API/tags/list"| jq -r '."tags"[]'
Si vous souhaitez comparer ce que vous avez dans votre registre openshift local avec ce qui se trouve dans le registre amont.redhat.com, voici un script complet .
docker(1)
github.com/docker/for-linux/issues/455Réponses:
J'ai obtenu la réponse d' ici . Merci beaucoup! :)
Un script sur une seule ligne: (trouvez toutes les balises de debian)
MISE À JOUR Merci pour les conseils de @ degelf. Voici le script shell.
Vous pouvez simplement créer un nouveau nom de fichier
dockertags
, sous / usr / local / bin (ou ajouter un envoi PATH à votre.bashrc
/.zshrc
), et y mettre ce code. Ajoutez ensuite les autorisations exécutables (chmod +x dockertags
).Usage:
dockertags ubuntu
---> liste de toutes les balises de ubuntudockertags php apache
---> liste de toutes les balises php php contenant 'apache'la source
...
[backtick] pour le condenser en une seule ligne. Et / ou remplacez "debian" par $ 1 et placez-le dans un script appelé "dockertags" sous / usr / local / bin. Ensuite, avant le backtick de fermeture, vous pouvez ajouter | grep $ 2. Ensuite, chmod + x it, et ensuite vous pouvez aller "dockertags php apache" pour voir toutes les balises php contenant apache.wget -q https://registry.hub.docker.com/v1/repositories/circleci/ruby/tags -O - | jq -r '.[].name'
si vous avezjq
installésed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'
est beaucoup plus propretr -d '[]" '
userauth="-u ${2}"
autorisation${userauth}
(s'il est vide, pas de bascule ou de paramètres). Cela pourrait aider toute personne utilisant desDepuis Docker Registry V2, un simple
GET
suffixe:Consultez la documentation pour en savoir plus.
la source
sed
semble en fait plus simple à utiliser pour une vérification rapide ...Si vous souhaitez utiliser l'API Docker Registry v2, il répertorie les balises par pages. Pour lister toutes les balises d'une image, vous voudrez peut-être ajouter un grand paramètre page_size à l'url, par exemple
la source
https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101
travail?java
image est un bon exemple. Oui, vous pouvez faire des choses comme Registry.hub.docker.com/v2/repositories/library/java/tags/… . Voir les liensnext
etprevious
dans le résultat pour des exemples.L'API Docker V2 nécessite un jeton de support OAuth avec les revendications appropriées. À mon avis, la documentation officielle est assez vague sur le sujet. Pour que les autres ne subissent pas la même douleur que moi, j'offre la
docker-tags
fonction ci-dessous .La version la plus récente de
docker-tags
peut être trouvée dans mon GitHubGist: "List Docker Image Tags using bash" .La fonction docker-tags dépend de jq . Si vous jouez avec JSON, vous l'avez probablement déjà.
Exemple
Certes,
docker-tags
fait plusieurs hypothèses. Plus précisément, les paramètres de demande OAuth sont pour la plupart codés en dur. Une mise en œuvre plus ambitieuse ferait une demande non authentifiée au registre et dériverait les paramètres OAuth de la réponse non authentifiée.la source
arr=("$@")
. Il suffit d'écriredocker-tags() { for item; do ....
J'ai réussi à le faire fonctionner en utilisant curl:
Notez que cela
image_name
ne devrait pas contenir de détails sur l'utilisateur, etc. Par exemple, si vous poussez l'image nommée,tutum.co/username/x
elleimage_name
devrait l'êtrex
.la source
S'appuyant sur la réponse de Yan Foto (l' API v2 ), j'ai créé un simple script Python pour répertorier les balises d'une image donnée .
Usage:
Production:
la source
Si l'outil d'analyse JSON
jq
est disponiblela source
'.[].name'
no matches found: .[].name
. Mais cela fonctionne bien sur bash, c'est peut-être votre shell par défaut?jq
commandeVoir l'utilitaire CLI: https://www.npmjs.com/package/docker-browse
Permet l'énumération des tags et des images.
docker-browse tags <image>
répertorie toutes les balises de l'image. par exempledocker-browse tags library/alpine
docker-browse images
répertorie toutes les images du registre. Non disponible actuellement pourindex.docker.io
.Vous pouvez le connecter à n'importe quel registre, y compris votre registre privé, tant qu'il prend en charge Docker Registry HTTP API V2
la source
Pour afficher toutes les balises disponibles dans un navigateur:
https://registry.hub.docker.com/v1/repositories/<username>/<image_name>/tags
ie https://hub.docker.com/r/localstack/localstack/tags
Ou, vous pouvez obtenir une réponse json en utilisant ce point de terminaison:
https://registry.hub.docker.com/v1/repositories/localstack/localstack/tags
la source
Vous pouvez également utiliser ce scrap:
& Ajouter ce qui suit (tel quel):
Rendez-le exécutable:
Puis enfin essayez par:
[J'espère que vous connaissez $ & # avant d'exécuter une commande]
la source
Vous pouvez l'utiliser si votre env n'a pas de 'jq', =)
la source
Obtenir toutes les balises de Docker Hub: cette commande utilise le
JSON
processeur de ligne de commandejq
pour sélectionner les noms de balise parmi ceuxJSON
renvoyés par le Docker Hub Registry (les guillemets sont supprimés avectr
). Remplacez la bibliothèque par le nom d'utilisateur Docker Hub, debian par le nom de l'image:la source
Voici un script Powershell que j'ai écrit pour Windows. Gère les dépôts v1 et v2:
Get-DockerImageVersions.ps1:
la source
Vous pouvez y parvenir en exécutant sur le terminal ceci:
De plus, si vous n'avez pas jq, vous devez l'installer en
la source
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name
vous fera économiser une commande grepcurl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
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 (Docker repo) présentes dans le registre. J'ai donc du code dans le script batch.
Ainsi, nous pouvons donner des arguments pour sortir le fichier batch comme:
la source
L'API Docker Registry a un point de terminaison pour répertorier toutes les balises .
On dirait que Tutum a un point de terminaison similaire , ainsi qu'un moyen d'accéder via tutum-cli .
Avec le tutum-cli, essayez ce qui suit:
la source
Dans powershell 5.1, j'ai un simple script list_docker_image_tags.ps1 comme celui-ci:
Ensuite, je peux rechercher des balises 4.7 comme ceci:
la source
Vous pouvez lister toutes les balises avec skopeo .
Pour les registres externes:
la source
Si les gens veulent lire les balises du registre RedHat à,
https://registry.redhat.io/v2
les étapes sont les suivantes:Si vous souhaitez comparer ce que vous avez dans votre registre openshift local avec ce qui se trouve dans le registre amont.redhat.com, voici un script complet .
la source