2015-02-04 4 views
49

Ich würde gerne wissen, wie Sie alle Tags eines Docker-Bilds in einer Remote-Docker-Registrierung (tutum in unserem Fall, aber ich glaube nicht, dass es darauf ankommt) mit der CLI (bevorzugt) oder curl? Am besten, ohne alle Versionen aus der Remote-Registrierung zu ziehen, möchte ich nur die Tags auflisten.Wie listet man alle Tags für ein Docker-Image in einer Remote-Registry auf?

+1

ähnlich wie http://stackoverflow.com/questions/24481564/how-can-i-find- docker-image-mit-spezifischen-tag-in-docker-registrierung-in-docker-komma/32622147 # 32622147 – shadowbq

Antwort

34

Ich bekam die Antwort von here. Danke vielmals! :)

nur einzeilige-Skript: (alle Tags von debain finden)

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 Dank für das @ degelf Rat ab. Hier ist das Shell-Skript.

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

Sie können nur einen neuen Dateinamen dockertags unter/usr/local/bin (oder fügen Sie eine PATH env auf Ihre .bashrc/.zshrc) erstellen und diese Code in sie. Fügen Sie dann die ausführbaren Berechtigungen hinzu (chmod +x dockertags).

Verbrauch:

dockertags ubuntu ---> Liste Alle Tags von ubuntu

dockertags php apache ---> Liste alle php php-Tags enthalten 'Apache'

+1

Sie können das Ganze in echo [backtick] '...' [backtick] verpacken, um es in eine Zeile zu verdichten.Und/oder ersetzen Sie "debian" durch $ 1 und setzen Sie es in ein Skript namens "dockertags" unter/usr/local/bin. Vor dem abschließenden Backtick kannst du | grep $ 2 hinzufügen. Dann chmod + x es, und dann können Sie "dockertags php apache" gehen, um alle PHP-Tags mit Apache zu sehen. – dagelf

+0

@dagelf Danke. Ich habe meine Antwort aktualisiert. –

+0

Das * ist * die Antwort, nach der ich suche! –

0

Die Docker Registry API hat einen Endpunkt zu list all tags.

Sieht aus wie Tutum hat eine similar endpoint, sowie eine Möglichkeit, über tutum-cli zuzugreifen.

Mit den tutum-cli, versuchen Sie Folgendes:

tutum tag list <uuid> 
+1

Ich glaube nicht, dass dies für Registry-Images funktioniert. Ich bekomme nur eine "Identifier '' passt nicht zu einem Service, Knoten oder NodeCluster". – Johan

+1

Docker-Registrierungs-API-Verbindung ist ungültig – Dmitriusan

+0

https://docs.docker.com/registry/spec/api/#listing-image-tags –

13

ich diese habe es geschafft, zu arbeiten curl mit:

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

Beachten Sie, dass image_name nicht Benutzerdaten usw. enthalten sollte Beispiel, wenn Sie drücken Bild mit dem Namen tutum.co/username/x dann image_name sollte x sein.

+1

Der v2-Endpunkt ist hier dokumentiert: https://docs.docker.com/registry/ spec/api/# listing-image-tags – morloch

20

Ab Docker Registry V2, eine einfache GET genügen:

GET /v2/<name>/tags/list 

Siehe docs für mehr.

0

Wenn die Parsing-Tool JSON, jq

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

Sie diesen Schrott auch verfügbar ist verwenden können:

(wie es ist) Nach
# vim /usr/sbin/docker-tags 

& anhängen:

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

Machen Sie es ausführbar:

# chmod 755 /usr/sbin/docker-tags 

schließlich Versuchen durch:

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

$ docker search ubuntu 

$ docker-tags teamrock/ubuntu 
    latest 

[Hope you vor dem Ausführen beliebigen Befehl bewusst $ & # sind]

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

Sie es verwenden können, wenn Ihr env hat kein 'jq', =)

9

Wenn Sie die API von docker registry v2 verwenden möchten, werden Tags nach Seiten aufgelistet. Um alle Tags eines Bildes aufzulisten, möchten Sie möglicherweise der URL einen großen page_size-Parameter hinzufügen, z.

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

Docker Hub scheint page_size auf ein effektives Maximum von 100 zu begrenzen. – Shane

+2

@Shane Oh wirklich? Ich habe kein Bild mit so vielen Seiten gefunden. Funktioniert eine URL wie https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101? – 0xCC

+1

das 'Java'-Bild ist ein gutes Beispiel. Ja, Sie können Dinge wie https://registry.hub.docker.com/v2/repositories/library/java/tags/?page_size=100&page=2 tun. Beispiele finden Sie unter den Links "next" und "previous" im Ergebnis. – Shane

2

Alle Tags von Docker Hub Get: Dieser Befehl wird mit dem Befehlszeile JSON Prozessor jq die Tag-Namen aus den JSON wählen von dem Docker Hub Registry zurückgegeben (die Anführungszeichen mit tr entfernt werden). Ersetzen Bibliothek mit dem Docker Hub Benutzernamen, debian mit dem Bild Name:

curl -s 'https://registry.hub.docker.com/v2/repositories/library/debian/tags/' | jq '."results"[]["name"]' | tr -d '"' 
+2

Bitte überlegen Sie eine kleine Erklärung, warum dies die Frage beantwortet, was es tut, ... –

0

Siehe CLI-Dienstprogramm: https://www.npmjs.com/package/docker-browse

Ermöglicht die Aufzählung von Tags und Bildern.

docker-browse tags <image> listet alle Tags für das Bild auf. z.B. docker-browse tags library/alpine

docker-browse images listet alle Bilder in der Registrierung auf. Derzeit nicht verfügbar für index.docker.io.

Sie es zu jeder Registrierung eine Verbindung herstellen können, einschließlich private ein, solange es Docker Registry unterstützt HTTP API V2

Verwandte Themen