UPDATE Vielen Dank für den Rat von @ degelf. 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 einfach einen neuen Dateinamen dockertagsunter / usr / local / bin erstellen (oder Ihrem .bashrc/ eine PATH-Umgebung hinzufügen .zshrc) und diesen Code einfügen. Fügen Sie dann die ausführbaren Berechtigungen ( chmod +x dockertags) hinzu.
Verwendung:
dockertags ubuntu ---> liste alle Tags von Ubuntu auf
dockertags php apache ---> liste alle PHP-Tags auf, die 'Apache' enthalten
Sie können das Ganze in echo [backtick] ...[backtick] einwickeln, um es in einer Zeile zusammenzufassen. Und / oder ersetzen Sie "debian" durch $ 1 und fügen Sie es in ein Skript namens "dockertags" unter / usr / local / bin ein. Dann können Sie vor dem schließenden Backtick | grep $ 2 hinzufügen. Dann chmod + x it, und dann können Sie "Dockertags PHP Apache" gehen, um alle PHP-Tags zu sehen, die Apache enthalten.
Dagelf
8
wget -q https://registry.hub.docker.com/v1/repositories/circleci/ruby/tags -O - | jq -r '.[].name'wenn Sie jqinstalliert haben
sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'ist viel sauberer geschriebentr -d '[]" '
William Pursell
1
Ich habe das zweite Positionsargument als Benutzername: Passwort geändert, damit ich wget für curl ausschalten und userauth="-u ${2}"es mir erlauben kann ${userauth}(wenn es leer ist, keine Umschaltung oder Parameter). Dies könnte jedem helfen, der private
Repos verwendet
79
Ab Docker Registry V2 reicht ein einfaches GETaus:
Basierend auf den Informationen im Unterabschnitt Tags in den Dokumenten scheint dieses GET eine Autorisierung zu erfordern, sodass die v1 API + sedfür eine schnelle Überprüfung tatsächlich einfacher zu verwenden scheint ...
akavel
3
Wenn Sie einen "nicht autorisierten" Fehler erhalten, lesen Sie meine alternative Antwort . Keine Beleidigung für die Person, die die ursprüngliche Antwort gepostet hat. Ich musste zusätzliche Schritte unternehmen, um die obige Antwort zum Laufen zu bringen, und wollte anderen helfen.
RobV8R
23
Wenn Sie die Docker-Registrierungs-v2-API verwenden möchten, werden Tags nach Seiten aufgelistet. Um alle Tags eines Bildes aufzulisten, möchten Sie der URL möglicherweise einen großen Parameter page_size hinzufügen, z
Docker Hub scheint page_size auf ein effektives Maximum von 100 zu beschränken.
Shane
2
@ Shane Oh wirklich? Ich habe kein Bild mit so vielen Seiten gefunden. Funktioniert eine URL gerne https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101?
Die Docker V2-API erfordert ein OAuth-Inhaber-Token mit den entsprechenden Ansprüchen. Meiner Meinung nach ist die offizielle Dokumentation zu diesem Thema eher vage. Damit andere nicht die gleichen Schmerzen haben wie ich, biete ich die folgende docker-tagsFunktion an.
Zugegeben, docker-tagsmacht mehrere Annahmen. Insbesondere sind die OAuth-Anforderungsparameter meist fest codiert. Eine ehrgeizigere Implementierung würde eine nicht authentifizierte Anforderung an die Registrierung senden und die OAuth-Parameter aus der nicht authentifizierten Antwort ableiten.
Beachten Sie, dass image_namedies keine Benutzerdetails usw. enthalten sollte . Wenn Sie beispielsweise ein Bild mit dem Namen tutum.co/username/xpushen, image_namesollte dies der Fall sein x.
Was ist diese tutum.co-Website, von der Sie sagen, ich sollte ihnen mein Dockerhub-Login und Passwort geben?
Nakilon
1
@Nakilon Als ich diese Antwort vor einigen Jahren schrieb, war Tutum ein Dienst, der eine private Docker-Registrierung bereitstellte. Und ich "gebe" ihnen nicht mein Passwort, ich authentifiziere mich mit ihrem Dienst unter Verwendung der Standard-HTTP-Basisauthentifizierung über https.
Johan
Tutum existiert nicht mehr. Können Sie Ihre Antwort aktualisieren, damit die Benutzer ihre Anmeldeinformationen nicht versehentlich an denjenigen senden, dem diese Domain jetzt gehört?
docker-browse tags <image>listet alle Tags für das Bild auf. z.Bdocker-browse tags library/alpine
docker-browse imageslistet alle Bilder in der Registrierung auf. Derzeit nicht verfügbar für index.docker.io.
Sie können eine Verbindung zu einer beliebigen Registrierung herstellen, einschließlich Ihrer privaten, sofern die Docker Registry HTTP API V2 unterstützt wird
Erhalten Sie alle Tags von Docker Hub: Dieser Befehl wird mit dem JSONBefehlszeilenprozessor jqden Tag - Namen aus der Auswahl JSONzurück vom Docker Hub Registry (die Anführungszeichen werden entfernt mit tr). Ersetzen Sie die Bibliothek durch den Docker Hub-Benutzernamen, debian durch den Bildnamen :
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name wird Ihnen einen grep-Befehl
ersparen
mit Version 1:curl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
Danilo
1
Ich habe dies getan, wenn ich eine Aufgabe implementieren muss, bei der, wenn der Benutzer irgendwie das falsche Tag eingibt, die Liste aller im Repo (Docker Repo) im Register vorhandenen Tags angegeben werden muss. Ich habe also Code im Batch-Skript.
<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>
In diesem Fall können wir unserer Batch-Datei folgende Argumente geben:
Ich denke nicht, dass dies für Registrierungsbilder funktioniert. Ich erhalte nur eine "Kennung '<id>', die keinem Dienst, Knoten oder Knotencluster entspricht".
Johan
1
In Powershell 5.1 habe ich ein einfaches list_docker_image_tags.ps1- Skript wie das folgende:
Wenn Leute Tags aus der RedHat-Registrierung lesen möchten, https://registry.redhat.io/v2sind die Schritte:
# 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"[]'
Wenn Sie vergleichen möchten, was Sie in Ihrer lokalen OpenShift-Registrierung haben, mit dem, was sich in der Upstream-Registrierung befindet . Redhat.com, dann ist hier ein vollständiges Skript .
docker(1)
github.com/docker/for-linux/issues/455Antworten:
Ich habe die Antwort von hier bekommen . Vielen Dank! :) :)
Nur einzeiliges Skript: (finde alle Tags von debian)
UPDATE Vielen Dank für den Rat von @ degelf. Hier ist das Shell-Skript.
Sie können einfach einen neuen Dateinamen
dockertags
unter / usr / local / bin erstellen (oder Ihrem.bashrc
/ eine PATH-Umgebung hinzufügen.zshrc
) und diesen Code einfügen. Fügen Sie dann die ausführbaren Berechtigungen (chmod +x dockertags
) hinzu.Verwendung:
dockertags ubuntu
---> liste alle Tags von Ubuntu aufdockertags php apache
---> liste alle PHP-Tags auf, die 'Apache' enthaltenquelle
...
[backtick] einwickeln, um es in einer Zeile zusammenzufassen. Und / oder ersetzen Sie "debian" durch $ 1 und fügen Sie es in ein Skript namens "dockertags" unter / usr / local / bin ein. Dann können Sie vor dem schließenden Backtick | grep $ 2 hinzufügen. Dann chmod + x it, und dann können Sie "Dockertags PHP Apache" gehen, um alle PHP-Tags zu sehen, die Apache enthalten.wget -q https://registry.hub.docker.com/v1/repositories/circleci/ruby/tags -O - | jq -r '.[].name'
wenn Siejq
installiert habensed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'
ist viel sauberer geschriebentr -d '[]" '
userauth="-u ${2}"
es mir erlauben kann${userauth}
(wenn es leer ist, keine Umschaltung oder Parameter). Dies könnte jedem helfen, der privateAb Docker Registry V2 reicht ein einfaches
GET
aus:Weitere Informationen finden Sie in den Dokumenten .
quelle
sed
für eine schnelle Überprüfung tatsächlich einfacher zu verwenden scheint ...Wenn Sie die Docker-Registrierungs-v2-API verwenden möchten, werden Tags nach Seiten aufgelistet. Um alle Tags eines Bildes aufzulisten, möchten Sie der URL möglicherweise einen großen Parameter page_size hinzufügen, z
quelle
https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101
?java
Bild ist ein gutes Beispiel. Ja, Sie können beispielsweise registry.hub.docker.com/v2/repositories/library/java/tags/… ausführen . Beispiele finden Sie unter den Linksnext
undprevious
im Ergebnis.Die Docker V2-API erfordert ein OAuth-Inhaber-Token mit den entsprechenden Ansprüchen. Meiner Meinung nach ist die offizielle Dokumentation zu diesem Thema eher vage. Damit andere nicht die gleichen Schmerzen haben wie ich, biete ich die folgende
docker-tags
Funktion an.Die neueste Version von
docker-tags
befindet sich in meinem GitHubGist: "List Docker Image Tags using bash" .Die Docker-Tags-Funktion ist von jq abhängig . Wenn Sie mit JSON spielen, haben Sie es wahrscheinlich bereits.
Beispiel
Zugegeben,
docker-tags
macht mehrere Annahmen. Insbesondere sind die OAuth-Anforderungsparameter meist fest codiert. Eine ehrgeizigere Implementierung würde eine nicht authentifizierte Anforderung an die Registrierung senden und die OAuth-Parameter aus der nicht authentifizierten Antwort ableiten.quelle
arr=("$@")
. Schreiben Sie einfachdocker-tags() { for item; do ....
Ich habe es geschafft, es mit Curl zum Laufen zu bringen:
Beachten Sie, dass
image_name
dies keine Benutzerdetails usw. enthalten sollte . Wenn Sie beispielsweise ein Bild mit dem Namentutum.co/username/x
pushen,image_name
sollte dies der Fall seinx
.quelle
Aufbauend auf der Antwort von Yan Foto (der v2-API ) habe ich ein einfaches Python-Skript erstellt, um die Tags für ein bestimmtes Bild aufzulisten .
Verwendung:
Ausgabe:
quelle
Wenn das JSON-Parsing-Tool
jq
verfügbar istquelle
'.[].name'
no matches found: .[].name
. Aber es funktioniert gut bei Bash, vielleicht ist es Ihre Standard-Shell?jq
BefehlSiehe 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.Bdocker-browse tags library/alpine
docker-browse images
listet alle Bilder in der Registrierung auf. Derzeit nicht verfügbar fürindex.docker.io
.Sie können eine Verbindung zu einer beliebigen Registrierung herstellen, einschließlich Ihrer privaten, sofern die Docker Registry HTTP API V2 unterstützt wird
quelle
So zeigen Sie alle verfügbaren Tags in einem Browser an:
https://registry.hub.docker.com/v1/repositories/<username>/<image_name>/tags
dh https://hub.docker.com/r/localstack/localstack/tags
Mit diesem Endpunkt können Sie auch eine JSON-Antwort erhalten:
https://registry.hub.docker.com/v1/repositories/localstack/localstack/tags
quelle
Sie können diesen Schrott auch verwenden:
& Folgendes anhängen (wie es ist):
Machen Sie es ausführbar:
Dann probieren Sie es endlich aus:
[Ich hoffe, Sie kennen $ & #, bevor Sie einen Befehl ausführen]
quelle
Sie können es verwenden, wenn Ihre Umgebung kein 'jq' hat, =)
quelle
Erhalten Sie alle Tags von Docker Hub: Dieser Befehl wird mit dem
JSON
Befehlszeilenprozessorjq
den Tag - Namen aus der AuswahlJSON
zurück vom Docker Hub Registry (die Anführungszeichen werden entfernt mittr
). Ersetzen Sie die Bibliothek durch den Docker Hub-Benutzernamen, debian durch den Bildnamen :quelle
Hier ist ein Powershell-Skript, das ich für Windows geschrieben habe. Behandelt Repos der Versionen v1 und v2:
Get-DockerImageVersions.ps1:
quelle
Sie können dies erreichen, indem Sie auf dem Terminal Folgendes ausführen:
Wenn Sie kein jq haben, müssen Sie es auch von installieren
quelle
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name
wird Ihnen einen grep-Befehlcurl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
Ich habe dies getan, wenn ich eine Aufgabe implementieren muss, bei der, wenn der Benutzer irgendwie das falsche Tag eingibt, die Liste aller im Repo (Docker Repo) im Register vorhandenen Tags angegeben werden muss. Ich habe also Code im Batch-Skript.
In diesem Fall können wir unserer Batch-Datei folgende Argumente geben:
quelle
Die Docker-Registrierungs-API verfügt über einen Endpunkt zum Auflisten aller Tags .
Tutum hat anscheinend einen ähnlichen Endpunkt sowie eine Möglichkeit, über tutum-cli darauf zuzugreifen .
Versuchen Sie mit dem Tutum-Cli Folgendes:
quelle
In Powershell 5.1 habe ich ein einfaches list_docker_image_tags.ps1- Skript wie das folgende:
Dann kann ich nach 4.7 Tags wie diesen suchen:
quelle
Sie können alle Tags mit skopeo auflisten .
Für externe Register:
quelle
Wenn Leute Tags aus der RedHat-Registrierung lesen möchten,
https://registry.redhat.io/v2
sind die Schritte:Wenn Sie vergleichen möchten, was Sie in Ihrer lokalen OpenShift-Registrierung haben, mit dem, was sich in der Upstream-Registrierung befindet . Redhat.com, dann ist hier ein vollständiges Skript .
quelle