Docker registry 2.0 API v2

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

Я попытался нажать изображение успешно, но когда я пытаюсь найти изображение, я получаю 404:

[email protected]:~# 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

Ответ 1

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

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

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

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

Ответ 2

если вы находитесь в окнах, здесь Powershell script запрашивает v2/_catalog из окон с базовым HTTP-аутентификатором.

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

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

Ответ 3

Я предполагаю, что самый простой способ проверить, присутствует ли образ докера, с помощью сервиса списка тегов 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"}}]} 

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

Ответ 4

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

Ответ 5

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

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

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

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

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`

Вывод:

`$ ./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

Ответ 6

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

[email protected]:~$ 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
[email protected]:~$ 

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

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

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

Ответ 7

@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"}}]}

Ответ 8

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

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

Ответ 9

Правильно.

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

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