it-swarm.com.de

So erhalten Sie eine Liste mit Bildern in der Docker-Registrierung v2

Ich verwende die Docker-Registry v1 und bin an einer Migration auf die neuere Version v2 interessiert. Aber ich brauche eine Möglichkeit, um eine Liste der in der Registrierung vorhandenen Bilder zu erhalten. Zum Beispiel mit Registry v1 kann ich eine GET-Anfrage an http://myregistry:5000/v1/search? ausführen und das Ergebnis ist:

{
  "num_results": 2,
  "query": "",
  "results": [
    {
      "description": "",
      "name": "deis/router"
    },
    {
      "description": "",
      "name": "deis/database"
    }
  ]
}

Aber ich kann nicht auf offizielle Dokumentation etwas Ähnliches finden, um eine Liste mit Bildern in der Registrierung zu erhalten. Kennt jemand eine Möglichkeit, dies in der neuen Version v2 zu tun?

147
kikicarbonell

Für die neueste Version (ab 31.07.2015) von Registry V2 erhalten Sie dieses Bild von DockerHub:

docker pull distribution/registry:master

Alle Repositories (effektiv Bilder) auflisten:

curl -X GET https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}

Alle Tags für ein Repository auflisten:

curl -X GET https://myregistry:5000/v2/ubuntu/tags/list
> {"name":"ubuntu","tags":["14.04"]}
287
jonatan

sie können weiter suchen 

http: // <ip/hostname>: <port>/v2/_catalog

56

Holen Sie sich Kataloge

Standardmäßig gibt die Registry-API 100 Einträge des Katalogs zurück. Es gibt den code :

Wenn Sie die Registry-API rollen:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

es entspricht Äquivalenten mit :

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=100

Dies ist eine Paginierungsmethode.

Wenn die Summe der Einträge größer als 100 ist, haben Sie zwei Möglichkeiten:

Zuerst: Geben Sie eine größere Zahl ein

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=2000

Sencond: parse die nächste Linker-URL

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

Ein im Antwortheader enthaltenes Linkelement:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

antwortheader:

Link: </v2/_catalog?last=pro-octopus-ws&n=100>; rel="next"

Das Linkelement hat den letzten Eintrag dieser Anfrage, dann können Sie die nächste 'Seite' anfordern:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?last=pro-octopus-ws

Wenn der Antwortheader das Element link enthält, können Sie dies in einer Schleife loop tun.

Holen Sie sich Bilder

Wenn Sie das Ergebnis eines Katalogs erhalten, ist es wie folgt:

{ "repositories": [ "busybox", "ceph/mds" ] }

sie können die Bilder in jedem Katalog erhalten:

curl --cacert domain.crt https://your.registry:5000/v2/busybox/tags/list

kehrt zurück:

{"name":"busybox","tags":["latest"]}

29
litanhua

Die neueste Version von Docker Registry ist unter https://github.com/docker/distribution verfügbar und unterstützt die Katalog-API. (v2/_catalog). Dies ermöglicht die Suche nach Repositories

Bei Interesse können Sie die Docker-Image-Registrierungs-CLI, die ich erstellt habe, ausprobieren, um die Verwendung der search-Funktionen in der neuen Docker-Registrierungsdistribution zu vereinfachen ( https://github.com/vivekjuneja/docker_registry_cli ).

23
ZephyrPLUSPLUS

Das hat mich verrückt gemacht, aber ich habe endlich alle Teile zusammengefügt. Seit dem 25.01.2015 habe ich bestätigt, dass es möglich ist, die Bilder in der Docker V2-Registrierung aufzulisten (genau wie bei @jonatan oben angegeben.)

Ich würde diese Antwort überstimmen, wenn ich die Vertreter dafür hätte.

Stattdessen werde ich auf die Antwort eingehen. Da Registry V2 unter Sicherheitsaspekten erstellt wird, ist es meiner Meinung nach angebracht, wie man es mit einem selbstsignierten cert einrichtet und den Container mit diesem cert ausführt, damit ein https-Aufruf möglich ist gemacht mit diesem cert:

Dies ist das Skript, das ich tatsächlich zum Starten der Registrierung verwende:

Sudo docker stop registry
Sudo docker rm -v registry
Sudo docker run -d \
  -p 5001:5001 \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /data/registry:/var/lib/registry \
  -v /root/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ 
  -e REGISTRY_HTTP_DEBUG_ADDR=':5001' \
  registry:2.2.1

Dies mag für manche offensichtlich sein, aber ich bin immer mit Schlüsseln und Zertifikaten vermischt. Die Datei, auf die verwiesen werden muss, damit der Aufruf @jonaton oben ** erwähnt wird, ist die oben aufgeführte domain.crt. (Da ich domain.crt in /root abgelegt habe, habe ich eine Kopie in das Benutzerverzeichnis kopiert, in dem darauf zugegriffen werden konnte.) 

curl --cacert ~/domain.crt https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}

** Der obige Befehl wurde geändert: -X GET funktionierte nicht, als ich es ausprobierte.

Hinweis: https://myregistry:5000 (wie oben) muss mit der Domäne übereinstimmen, die dem generierten Zertifikat zugewiesen wurde.

19
Cognitiaclaeves

Siehe @ jonathans Antwort unten oder die Registrierungs-API-Dokumente hier: https://docs.docker.com/registry/spec/api/

Wenn Sie nach "Listing" suchen, werden Sie feststellen, dass die Unterstützung in Version e hinzugefügt wurde.

14
Andy

Zu diesem Zweck haben wir ein CLI-Tool geschrieben: docker-ls Mit diesem Befehl können Sie eine Docker-Registry durchsuchen und die Authentifizierung über Token oder grundlegende Authentifizierung unterstützen.

12

Installieren Sie die Registrierung: 2.1.1 oder höher (Sie können die letzte, hier überprüfen) und verwenden Sie GET/v2/_catalog, um die Liste abzurufen. 

https://github.com/docker/distribution/blob/master/docs/spec/api.md#listing-repositories

Alle Bilder nach einem Shell-Skript auflisten: https://Gist.github.com/OndrejP/a2386d08e5308b0776c0

9

Mit den Endpunkten "/ v2/_catalog" und "/ tags/list" können Sie nicht alle Bilder auflisten. Wenn Sie ein paar verschiedene Bilder gepusht und als "Neueste" markiert haben, können Sie die alten Bilder nicht wirklich auflisten! Sie können sie weiterhin abrufen, wenn Sie sie mit dem Digest "docker pull ubuntu @ sha256: ac13c5d2 ..." referenzieren. Die Antwort lautet also: Es gibt keine Möglichkeit, Bilder aufzulisten. Sie können nur Tags auflisten, die nicht identisch sind

2
user1616472

Wenn einige so weit kommen. 

Nehmen Sie, was andere schon oben gesagt haben. Hier ist ein Einzeiler, der die Antwort in eine formatierte Textdatei, json, schreibt. 

curl "http://mydocker.registry.domain/v2/_catalog?n=2000" | jq . - > /tmp/registry.lst

Das sieht so aus

{
  "repositories": [
    "somerepo/somecontiner",
    "somerepo_other/someothercontiner",
 ...
  ]
}

Möglicherweise müssen Sie das `? N = xxxx 'ändern, um der Anzahl der Container zu entsprechen.

Next ist eine Möglichkeit, alte und nicht verwendete Container automatisch zu entfernen. 

2
nelaaro

Die Funktionalität der Docker-Suchregistrierungsdatenbank v2 wird zum Zeitpunkt dieses Schreibens derzeit nicht unterstützt. Siehe Diskussion seit Februar 2015: "Vorgeschlagene Registrierungssuchfunktion # 206" https://github.com/docker/distribution/issues/206

Ich habe ein Skript geschrieben, das Sie finden können: https://github.com/BradleyA/Search-docker-registry-v2-script.1.0 .__ Es ist nicht hübsch, aber es erhält die Informationen, die vom privaten Benutzer benötigt werden Registrierung.

1
Bradley Allen

Ich musste dasselbe hier tun und die oben genannten Funktionen funktionieren, außer dass ich Anmeldedaten angeben musste, da es sich um ein lokales Docker-Repository handelt.

Dies geschieht wie oben, jedoch mit dem Benutzernamen/Passwort in der URL.

curl -k -X GET https://yourusername:[email protected]/v2/_catalog

Es kommt als unformatiertes JSON zurück.

Ich habe es durch den Python-Formatierer geleitet, um das menschliche Lesen zu erleichtern, falls Sie es in diesem Format haben möchten.

curl -k -X GET https://yourusername:[email protected]/v2/_catalog | python -m json.tool
1
chai

Ich habe ein benutzerfreundliches Befehlszeilentool geschrieben, um Bilder auf verschiedene Arten aufzulisten (z. B. alle Bilder auflisten, alle Tags dieser Bilder auflisten, alle Ebenen dieser Tags auflisten).

Sie können auch nicht verwendete Bilder auf verschiedene Arten löschen, z. B. nur ältere Tags eines einzelnen Bildes oder von allen Bildern usw. löschen. Dies ist praktisch, wenn Sie Ihre Registrierung von einem CI-Server aus füllen und nur die neuesten/stabilen Versionen beibehalten möchten.

Es ist in Python geschrieben und erfordert nicht, dass Sie sperrige, große benutzerdefinierte Registrierungsbilder herunterladen müssen.

1
anoxis

Hier ist ein netter kleiner Liner (verwendet JQ), um eine Liste von Repos und zugehörigen Tags auszudrucken.

Wenn Sie jq nicht installiert haben, können Sie Folgendes verwenden: brew install jq

# This is my URL but you can use any
REPO_URL=10.230.47.94:443

curl -k -s -X GET https://$REPO_URL/v2/_catalog \
 | jq '.repositories[]' \
 | sort \
 | xargs -I _ curl -s -k -X GET https://$REPO_URL/v2/_/tags/list
1
Jeef

Hier ist ein Beispiel, in dem alle Tags aller Bilder in der Registrierung aufgeführt sind. Es behandelt auch eine Registrierung, die für HTTP Basic auth konfiguriert ist.

THE_REGISTRY=localhost:5000

# Get username:password from docker configuration. You could
# inject these some other way instead if you wanted.
CREDS=$(jq -r ".[\"auths\"][\"$THE_REGISTRY\"][\"auth\"]" .docker/config.json | base64 -d)

curl -s --user $CREDS https://$THE_REGISTRY/v2/_catalog | \
    jq -r '.["repositories"][]' | \
    xargs -I @[email protected] curl -s --user $CREDS https://$THE_REGISTRY/v2/@[email protected]/tags/list | \
    jq -M '.["name"] + ":" + .["tags"][]'

Erläuterung:

  • benutzername extrahieren: Passwort von .docker/config.json
  • eine https-Anfrage an die Registry stellen, um alle "Repositorys" aufzulisten
  • filtern Sie das Json-Ergebnis nach einer einfachen Liste mit Repository-Namen
  • für jeden Repository-Namen:
  • eine https-Anfrage an die Registry senden, um alle "Tags" für dieses "Repository" aufzulisten
  • filtern Sie den Stream der Ergebnis-Json-Objekte und drucken Sie für jedes in jedem Repository gefundene Tag "repository": "tag" -Paare
0
Craig Ringer

Da jede Registrierung als Container ausgeführt wird, verfügt die Container-ID über eine zugehörige Protokolldatei ID-json.log. Diese Protokolldatei enthält die Dateien vars.name = [image] und vars.reference = [tag]. Mit einem Skript können diese extrapoliert und gedruckt werden. Dies ist möglicherweise eine Methode zum Auflisten von Bildern, die in die Registrierung V2-2.0.1 verschoben wurden.

0
Phil Pinkerton