Docker registry 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): все еще не здесь в дорожная карта распределения, но вот a конкретный вопрос о выдаче.
обновление (12 ноября 2015): конечные точки API все еще не существуют и еще не включены в дорожную карту реестра Docker.
проблема здесь в том, что новый реестр докеров v2 не поддерживает эту конкретную конечную точку пока, по состоянию на этот вопрос и ответ. Вы можете проверить источник для конечных точек маршрута, и вы увидите, что большинство конечных точек API включают простые операции, такие как загрузка и пометка, но еще нет реализации конечной точки поиска. Здесь важно отметить, что реестр v2 является полностью другой проект, чем реестр v1. Он даже написан на совершенно другом языке (v1 был проектом Python, тогда как v2 использует Go, что больше соответствует остальной части Docker projects). Мне потребовалось некоторое время и серьезное чтение, чтобы понять дихотомию здесь между реестрами. Стоит посмотреть в этой конкретной проблеме Github о реестре v2 для глубокого погружения в недавнее обсуждение состояния реестра v2, а также некоторые обсуждения о том, где они его принимали.
таким образом, в реестре v2 еще нет конечной точки поиска. Вы можете перечислить свое изображение по тегу или по самому имени изображения, как указано в задаче число 8 в данной документации.
если вы находитесь в windows, вот сценарий Powershell для запроса v2/_catalog
из windows с базовой http-аутентификацией.
https://gist.github.com/so0k/b59382ea7fd959cf7040
FYI, чтобы использовать это, вы должны docker pull distribution/registry:master
вместо docker pull registry:2
. the registry:2
версия изображения в настоящее время 2.0.1
который не поставляется с конечной точкой каталога.
Я думаю, что самый простой способ проверить, присутствует ли изображение docker, используя Docker V2 REST API Теги сервис
пример:
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/container. Я поместил его в сценарий и настроил параметры разреза, чтобы получить то, что я хотел, поскольку длина имен изображений немного меняется. запустить как 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
сегодня я попробовал 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"]}
, так что это работает.
вы можете взять посмотрите на документы.
@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"}}]}
Docker функции поиска реестра v2 не поддерживается на момент написания этой статьи. См. обсуждение с февраля 2015:https://github.com/docker/distribution/issues/206
Registry V2-это как падение изображений в черный мешок, надеюсь, вы помните, что вы упали и что вы назвали изображение. Даже не думайте об удалении изображения. Я не хочу копировать и заменять V2 на V1; хотя V1 работает и имеет несколько инструментов, которые работают с V1, включая поиск и удалить. Я начал с registry V2 из маркетинга; лучшая безопасность и производительность.
Ubuntu 14.04.3 LTS, CoreOS 723.3.0 регистр github.com/docker/distribution v2.1.1
Я написал сценарий с именем view-private-registry для поиска 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 '}`"
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
последняя версия реестра Docker доступна изhttps://github.com/docker/distribution поддерживает API каталога. (v2 / _catalog). Это позволяет осуществлять поиск.
Если интересно, вы можете попробовать docker image registry CLI, который я построил, чтобы упростить использование функций поиска в новом дистрибутиве Docker Registry v2: (https://github.com/vivekjuneja/docker_registry_cli)
правильно.
Это просто пример реализации, который работает, чтобы получить список картинок. Да, предполагается, что это общий registry2.0 запуск. например $ судо докер запустить-имя=myregistry -д -р порт:myregistry:1.0.
в основном дело в том, что каждый контейнер имеет файл журнала ...некоторые-путь / контейнеры... ID-json.бревно. В этом файле хранится информация об изображениях, помещенных в работающий реестр. Таким образом, его можно использовать для экстраполяции изображения список. Это лучше, чем ничего. Не решение большей проблемы поиска / каталога, а способ получить список изображений. Это очень индивидуальный обходной путь для решения проблемы в ожидании "официального" исправления.