Реестр Docker 2.0 API v2

Я вытащил и настроил локальный реестр докеров:2.0

Я попытался нажать на изображение успешно, но когда я пытаюсь найти изображение, я получаю 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

Также, когда я пытаюсь свернуть localhost:5000, я просто получаю 404:

404 page not found

9 ответов

Решение

ОБНОВЛЕНИЕ (14 апреля 2016 г.): По-прежнему отсутствует в дорожной карте распространения, но здесь есть особый вопрос о поиске.

ОБНОВЛЕНИЕ (12 ноября 2015 г.): конечные точки API еще не существуют и еще не включены в план действий Docker Registry.

Проблема здесь в том, что новый реестр Docker v2 еще не поддерживает эту конкретную конечную точку, на данный вопрос и ответ. Вы можете проверить сам источник на предмет конечных точек маршрута, и вы увидите, что большинство конечных точек API включают в себя простые операции, такие как выгрузка и тегирование, но пока нет реализации конечной точки поиска. Здесь важно отметить, что реестр v2 - это совершенно другой проект, чем реестр v1. Он даже написан на совершенно другом языке (v1 был проектом Python, тогда как v2 использует Go, что больше соответствует остальным проектам Docker). Мне потребовалось некоторое время и серьезное чтение, чтобы понять дихотомию между реестрами. Стоит взглянуть на этот конкретный вопрос Github о реестре v2, чтобы углубиться в недавнее обсуждение состояния реестра v2, а также обсудить, где они его взяли.

Так что в реестре v2 пока нет конечной точки поиска. Вы можете перечислить свое изображение по тегу или по имени самого изображения, как указано в задаче № 8 в этой документации.

Если вы работаете в Windows, вот скрипт Powershell для запроса v2/_catalog из окон с базовым http аутентификации.

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

К вашему сведению, чтобы использовать это, вы должны docker pull distribution/registry:master вместо docker pull registry:2, registry:2 версия изображения в настоящее время 2.0.1 который не поставляется с конечной точкой каталога.

Я предполагаю, что самый простой способ проверить, присутствует ли образ докера, с помощью сервиса списка тегов API REST Docker V2

Пример:-

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

если приведенный выше результат возвращает 200Ok со списком тегов изображения, то мы знаем, что изображение существует

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

иначе, если вы видите что-то вроде

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

тогда вы точно знаете, что изображение не существует.

В Linux (Centos 7) я использую это до тех пор, пока образ реестра является единственным работающим контейнером: в нем будут перечислены все изображения, помещенные в resistry/ контейнер. Я поместил его в скрипт и изменил параметры, чтобы получить то, что хотел, так как длина имен изображений немного различается. запустить как 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

Функциональность поиска в реестре Docker v2 не поддерживается на момент написания этой статьи. Смотрите обсуждение с февраля 2015 года: https://github.com/docker/distribution/issues/206

Реестр V2 - это то же самое, что бросать изображения в черный пакет. Надеюсь, вы помните, что вы ввели и как назвали изображение. Даже не думай об удалении изображения. Я не хочу разрывать и заменять V2 на V1; хотя V1 работает и имеет несколько инструментов, которые работают с V1, включая поиск и удаление. Я начал с реестра V2 из маркетинга; лучшая безопасность и производительность.

Ubuntu 14.04.3 LTS, реестр CoreOS 723.3.0 github.com/docker/distribution v2.1.1

Я написал скрипт с именем view-private-registry для поиска в реестре V2 REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY. Он работает на любой из моих систем, на которой смонтировано REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY. Дайте мне знать о любых изменениях, которые вы сделаете, спасибо.

Сценарий: 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`

Выход:

`$ ./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
@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"}}]}

Сегодня я попробовал registry:master изображение, но не существует.

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

Теперь вы можете запустить registry:2 и будет иметь конечную точку.

Если я посещу http://localhost:5000/v2/_catalog в моей машине я вижу этот вывод {"repositories":["ubuntu"]}что правильно. Также попробовал http://localhost:5000/v2/ubuntu/tags/list и получил этот ответ {"name":"ubuntu","tags":["latest"]}так оно и работает.

Вы можете взглянуть на документы.

Последняя версия Docker Registry, доступная по https://github.com/docker/distribution, поддерживает Каталог API. (V2/_catalog). Это позволяет для возможности поиска.

Если вам интересно, вы можете попробовать CLI реестра образов Docker, который я создал, чтобы упростить использование функций поиска в новом дистрибутиве Docker Registry v2:( https://github.com/vivekjuneja/docker_registry_cli)

Правильный.

Это просто пример реализации, которая работает для получения некоторого списка изображений. Да, предполагается, что это общий запуск Registry2.0. например, $ sudo docker run --name=myregistry -d -p порт: порт myregistry:1.0.

По сути, дело в том, что у каждого контейнера есть файл журнала...some-path/container... ID-json.log. В этом файле хранится информация об изображениях, помещаемых в работающий реестр. Так что это может быть использовано для экстраполяции списка изображений. Как бы сыро оно ни было, оно лучше, чем ничего. Не решение большой проблемы поиска / каталога, а способ получения списка изображений. Это очень индивидуальный обходной путь для решения проблемы в ожидании "официального" исправления.

Другие вопросы по тегам