web-dev-qa-db-fra.com

Registre Docker 2.0 API v2

J'ai tiré et installé le registre local de docker: 2.0

J'ai essayé de pousser une image avec succès, mais chaque fois que j'essaie de chercher une image, je reçois 404:

root@ip-10-232-0-153:~# curl -v -X GET http://localhost:5000/v2/search
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET /v2/search HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:5000
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Content-Type: text/plain; charset=utf-8
< Docker-Distribution-Api-Version: registry/2.0
< Date: Fri, 08 May 2015 00:00:45 GMT
< Content-Length: 19
<
404 page not found
* Connection #0 to Host localhost left intact

Aussi, quand j'essaie de boucler localhost: 5000, je viens d'obtenir un 404:

404 page not found
20
alexfvolk

UPDATE (14 avril 2016): toujours pas dans la feuille de route de la distribution , mais voici un problème particulier concernant la recherche .

UPDATE (12 novembre 2015): les points de terminaison de l'API n'existent toujours pas et ne figurent pas encore dans la feuille de route du registre Docker.

Le problème ici est que le nouveau registre v2 de Docker ne prend pas en charge ce noeud final particulier encore, à partir de cette question et de cette réponse. Vous pouvez vérifier la source elle-même _ pour les points de terminaison de la route. Vous constaterez que la plupart des points de terminaison de l'API impliquent des opérations simples comme le téléchargement et le balisage, mais aucune implémentation du point de terminaison de la recherche. Il est important de noter ici que le registre v2 est un projet complètement différent du registre v1. Il est même écrit dans un langage complètement différent (v1 était un projet Python, alors que v2 utilise Go, ce qui est plus en ligne avec le reste des projets Docker). Il m'a fallu un certain temps et une lecture sérieuse pour comprendre la dichotomie ici entre les registres. Il vaut la peine de rechercher cette question particulière de Github sur le registre v2 pour une plongée dans une discussion récente sur l'état du registre v2, ainsi qu'une discussion sur le lieu où ils l'ont prise.

Donc, il n'y a pas encore de noeud final de recherche dans le registre v2. Vous pouvez répertorier votre image par balise ou par son nom, comme indiqué dans la tâche numéro 8 dans cette documentation .

31
L0j1k

si vous êtes sur Windows, voici un script Powershell pour interroger le v2/_catalog à partir de Windows avec une autorisation http de base.

https://Gist.github.com/so0k/b59382ea7fd959cf7040

Pour votre information, vous devez utiliser docker pull distribution/registry:master au lieu de docker pull registry:2. La version de l'image registry:2 est actuellement 2.0.1, qui ne vient pas avec le noeud final du catalogue.

3
Vincent De Smet

Je suppose que le moyen le plus simple de vérifier si une image Docker est présente consiste à utiliser le service de liste Docker V2 REST API Tags

Exemple:- 

curl $CURLOPTS -H "Authorization: Bearer $token" "https://hub.docker.com:4443/v2/your-repo-name/tags/list"

si le résultat ci-dessus renvoie 200Ok avec une liste de balises d'image, alors nous savons que cette image existe

{"name":"your-repo-name","tags":["1.0.0.1533677221","1.0.0.1533740305","1.0.0.1535659921","1.0.0.1535665433","latest"]}

sinon, si vous voyez quelque chose comme 

{"errors":[{"code":"NAME_UNKNOWN","message":"repository name not known to registry","detail":{"name":"your-repo-name"}}]} 

alors vous savez avec certitude que l'image n'existe pas.

1
Abhishek J

Aujourd'hui, j'ai essayé l'image registry:master, mais ça n'existe pas.

xotl@xotl-VM:~$ docker run registry:master
Unable to find image 'registry:master' locally
Pulling repository docker.io/library/registry
Tag master not found in repository docker.io/library/registry
xotl@xotl-VM:~$ 

Vous pouvez maintenant exécuter le registry:2 et disposer du noeud final.

Si je visite http://localhost:5000/v2/_catalog dans ma machine, je peux voir cette sortie {"repositories":["ubuntu"]}, qui est correcte. Également essayé http://localhost:5000/v2/ubuntu/tags/list et obtenu cette réponse {"name":"ubuntu","tags":["latest"]}, donc ça marche.

Vous pouvez consulter la documentation .

0
Xotl

La fonctionnalité de recherche de registre Docker v2 n’est pas prise en charge au moment de la rédaction de ce document ..__ Voir la discussion depuis février 2015: https://github.com/docker/distribution/issues/206

Registry V2, c'est comme déposer des images dans un sac noir. J'espère que vous vous souviendrez de ce que vous avez déposé et de ce que vous avez nommé l'image. Ne pensez même pas à supprimer une image. Je ne veux pas déchirer et remplacer V2 avec V1; même si V1 fonctionne et a plusieurs outils qui fonctionnent avec V1, y compris la recherche et la suppression. J'ai commencé avec le registre V2 du marketing; meilleure sécurité et performance.

Ubuntu 14.04.3 LTS, CoreOS 723.3.0 Registry github.com/docker/distribution v2.1.1

J'ai écrit un script appelé view-private-registry afin de rechercher dans le registre la version 2 de REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY. Cela fonctionne sur n'importe lequel de mes systèmes sur lesquels est installé REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY. Faites-moi savoir si vous apportez des modifications, merci.

Script: https://github.com/BradleyA/Search-docker-registry-v2-script.1.0

#!/bin/bash
# %W% %G% %U%
#
#       View private registry,
#               if REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY is mounted on your system
#
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY="/mnt/three/docker-registry/registry-data"
#
find $REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY -print | \
    grep 'v2/repositories' | \
    grep 'current' | \
    grep -v 'link' | \
    sed -e 's/\/_manifests\/tags\//:/' | \
    sed -e 's/\/current//' | \
    sed -e 's/^.*repositories\//    /' | \
    sort > /tmp/a1
cat /tmp/a1
wc -l /tmp/a1 > /tmp/a2
echo "Number of images: `cat /tmp/a2 | awk {'print $1'}`"
echo "Disk space used:  `du -hs $REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY`"
rm /tmp/a1 /tmp/a2`

Sortie:

`$ ./view-private-registry`
busybox:latest
gcr.io/google_containers/etcd:2.0.9
gcr.io/google_containers/hyperkube:v0.21.2
gcr.io/google_containers/pause:0.8.0
google/cadvisor:latest
jenkins:latest
logstash:latest
mongo:latest
nginx:latest
python:2.7
redis:latest
registry:2.1.1
stackengine/controller:latest
Tomcat:7
Tomcat:latest
ubuntu:14.04.2
Number of images:   16
Disk space used:    1.7G    /mnt/three/docker-registry/registry-data
0
Bradley Allen

Sous Linux (Centos 7), je l’utilise aussi longtemps que l’image de registre est le seul conteneur en cours d’exécution: Cette option liste toutes les images envoyées au répertoire resistry/container . ce que je voulais comme longueur des noms d’image varie un peu. exécuter en tant que Sudo "script-name.sh"

grep -r -o "vars\.name=.* vars.reference=.*" /var/lib/docker/containers/* | cut -c 167-220 | sed 's/ver.*$//' | sed 's/vars\.name=//' | sed 's/ vars\.reference=/:/' | sort -u
0
Phil Pinkerton
@Xotl
curl -X GET registry.com:5000/v2/lashou/centos/tags/list
{"errors":[{"code":"NAME_UNKNOWN","message":"repository name not known to registry","detail":{"name":"lashou/centos"}}]}
0
user5443485