Docker registry 2.0 API v2

Wyciągnąłem i skonfigurowałem lokalny rejestr Dockera: 2.0

Próbowałem wypchnąć obrazek z powodzeniem, ale kiedy próbuję wyszukać obrazek, dostaję 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

Również, gdy próbuję curl localhost: 5000, po prostu dostaję 404:

404 page not found
Author: alexfvolk, 2015-05-08

9 answers

UPDATE (14 kwietnia 2016): nadal nie ma go w distribution roadmap, ale oto szczególny problem dotyczący wyszukiwania .

Aktualizacja (12 listopada 2015): punkty końcowe API nadal nie istnieją i nie znajdują się jeszcze w harmonogramie rejestru Dokerów.

Problem polega na tym, że nowy rejestr Dokerów v2 nie obsługuje jeszcze tego konkretnego punktu końcowego }, W związku z tym pytaniem i odpowiedzią. Możesz sprawdzić samo źródło dla zobaczysz, że większość punktów końcowych API obejmuje proste operacje, takie jak przesyłanie i oznaczanie, ale nie ma jeszcze implementacji punktu końcowego wyszukiwania. Ważne jest tutaj, aby zauważyć, że rejestr v2 jest CAŁKOWICIE innym projektem niż rejestr v1. Jest nawet napisany w zupełnie innym języku (v1 był projektem Pythona, podczas gdy v2 używa Go, który jest bardziej zgodny z resztą projektów Dockera). Zajęło mi to trochę czasu i poważną lekturę do zrozum dychotomię między rejestrami. Warto zajrzeć do tego konkretnego wydania Githuba na temat rejestru v2, aby zagłębić się w niedawną dyskusję na temat stanu rejestru v2, a także trochę dyskusji na temat tego, gdzie go zabrali.

Więc nie ma jeszcze punktu końcowego wyszukiwania w rejestrze v2. Możesz wyświetlać obraz po tagu lub po samej nazwie obrazu, jak wspomniano w zadaniu numer 8 w tej dokumentacji .

 31
Author: L0j1k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-14 07:25:22

Jeśli korzystasz z systemu windows, oto skrypt Powershell do odpytywania {[0] } z systemu windows za pomocą podstawowego auth http.

Https://gist.github.com/so0k/b59382ea7fd959cf7040

Dla twojej wiadomości, aby tego użyć, musisz docker pull distribution/registry:master zamiast docker pull registry:2. wersja obrazu registry:2 jest obecnie 2.0.1, która nie jest dołączona do punktu końcowego katalogu.

 3
Author: Vincent De Smet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-29 09:26:07

Myślę, że najprostszym sposobem sprawdzenia, czy obraz Dockera jest obecny, jest użycie Docker V2 REST API Tags list service

Przykład: -

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

Jeśli powyższy wynik zwróci 200Ok z listą znaczników obrazu, to wiemy, że obraz istnieje

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

Else if you see something like

{"errors":[{"code":"NAME_UNKNOWN","message":"repository name not known to registry","detail":{"name":"your-repo-name"}}]} 
Więc wiesz na pewno, że obraz nie istnieje.
 1
Author: Abhishek J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-06 14:35:49

Na Linuksie (Centos 7), używam tego tak długo, jak obraz rejestru jest jedynym uruchomionym kontenerem: wyświetli listę wszystkich obrazów wypchniętych do resistry/container. Umieściłem go w skrypcie i podkręciłem paramy cięcia, aby uzyskać to, czego chciałem, ponieważ długość nazw obrazów trochę się różni. Uruchom jako 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
Author: Phil Pinkerton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-04 18:34:46

Dzisiaj próbowałem registry:master obraz, ale nie istnieje.

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:~$ 

Teraz możesz uruchomić registry:2 i będzie miał punkt końcowy.

Jeśli odwiedzę http://localhost:5000/v2/_catalog w mojej maszynie, widzę to wyjście {"repositories":["ubuntu"]}, które jest poprawne. Próbowałem również http://localhost:5000/v2/ubuntu/tags/list i dostałem tę odpowiedź {"name":"ubuntu","tags":["latest"]}, więc działa.

Możesz rzucić okiem na dokumenty.

 0
Author: Xotl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-18 22:15:00
@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
Author: user5443485,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-17 15:39:17

Funkcja wyszukiwania rejestru Docker v2 nie jest obsługiwana w momencie pisania tego tekstu. Zobacz dyskusję Od Lutego 2015: https://github.com/docker/distribution/issues/206

Registry V2 jest jak upuszczanie obrazów do czarnej torby, mam nadzieję, że pamiętasz, co upuściłeś i co nazwałeś obraz. Nawet nie myśl o usunięciu obrazu. Nie chcę zgrywać i zastępować V2 V1; nawet jeśli v1 działa i ma kilka narzędzi, które działają z V1, w tym wyszukiwanie i usuwanie. I zaczęło się od rejestru V2 od marketingu; lepsze bezpieczeństwo i wydajność.

Ubuntu 14.04.3 LTS, CoreOS 723.3.0 rejestr github.com/docker/distribution v2. 1. 1

Napisałem skrypt o nazwie view-private-registry do wyszukiwania rejestru V2 REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY. Działa na każdym z moich systemów, który ma zamontowany katalog REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY. Daj mi znać o wszelkich zmianach, które chcesz wprowadzić, dzięki.

Skrypt: 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`

Wyjście:

`$ ./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
Author: Bradley Allen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 19:26:02

Najnowsza wersja rejestru Docker dostępna od https://github.com/docker/distribution obsługuje API katalogu. (v2/_catalog). Pozwala to na możliwość wyszukiwania.

Jeśli jesteś zainteresowany, możesz wypróbować Docker image registry CLI, który zbudowałem, aby ułatwić korzystanie z funkcji wyszukiwania w nowej dystrybucji Docker Registry v2: ( https://github.com/vivekjuneja/docker_registry_cli )

 -1
Author: ZephyrPLUSPLUS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-28 11:30:10

Zgadza się.

Jest to po prostu przykład implementacji, która działa, aby uzyskać listę obrazów. Tak, zakłada się, że jest to startowy registry2.0 generic. na przykład $ sudo docker run --name = myregistry-d-p port: port myregistry: 1.0.

Zasadniczo chodzi o to, że każdy kontener ma plik dziennika ...some-path / containers... ID-json.log. W tym pliku przechowywane są informacje o obrazach wypychanych do działającego rejestru. Można go więc wykorzystać do ekstrapolacji listy obrazów. Tak surowe jak to lepsze to niż nic. Nie jest to rozwiązanie większego problemu wyszukiwania / katalogu, ale sposób na uzyskanie listy obrazów. Jest to bardzo dostosowane obejście, aby rozwiązać problem podczas oczekiwania na" oficjalną " poprawkę.

 -1
Author: Phil Pinkerton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-05 15:08:32