Як шукати зображення з приватного реєстру 1.0 в Docker? [зачинено]


76

Я створив приватний реєстр, curl xx.xx.xx.xx: 5000 - це нормально. Я вставляю зображення в приватний реєстр docker, виконуючи: docker push xx.xx.xx.xx:5000/centos
it return:
http://xx.xx.xx.xx:5000/v1/repositories/centos/tags/latest

питання полягає в тому, як отримати всі зображення з веб-реєстру або як завгодно. Я не можу знайти будь-яку інформацію з doi реєстру api. хтось допомагає? :)


я маю на увазі, як шукати зображення з приватного реєстру за допомогою командного рядка або http
edwardsbean

Відповіді:


71

Починаючи з версії 0.7.0 приватного реєстру ви можете:

$ curl -X GET http://localhost:5000/v1/search?q=postgresql

і ви отримаєте корисне навантаження json:

{"num_results": 1, "query": "postgresql", "results": [{"description": "", "name": "library/postgresql"}]}

щоб дати більше довідки, ось як я запустив свій реєстр:

docker run \
        -e SETTINGS_FLAVOR=local \
        -e STORAGE_PATH=/registry \
        -e SEARCH_BACKEND=sqlalchemy \
        -e LOGLEVEL=DEBUG \
        -p 5000:5000 \
        registry

так що це недокументована особливість дляsearch
Ларрі Кай

5
див. посилання на це видання github.com/docker/docker-registry/issues/63 curl -X GET http://localhost:5000/v1/search може перерахувати всі зображення
Ларрі Кай

12
Станом на api v2 це робиться з http://localhost:5000/v2/_catalog docs.docker.com/registry/spec/api
mimo

89

Тепер з клієнта docker ви можете просто шукати у приватному реєстрі безпосередньо, не використовуючи API HTTP або будь-які додаткові інструменти:

наприклад, пошук зображення centos:

docker search localhost:5000/centos


На протокол, це працювало для мене за допомогою Docker версії 1.3.1, збірка 4e9bbfa
Марчелло Романі

4
Про це слід обов’язково згадати на сторінці довідки для клієнтів! docs.docker.com/reference/commandline/cli/#search
Марчелло Романі

1
@MarcelloRomani Я думаю, що це правильне посилання: docs.docker.com/engine/reference/commandline/search
Hexaholic

73

Отже, я знаю, що це швидко змінюється поле, але (станом на 08.09.2015) я знайшов у HTTP API V2 реєстру Docker Registry :

Список сховищ ( посилання )

GET /v2/_catalog

Перерахування тегів зображень ( посилання )

GET /v2/<name>/tags/list

Виходячи з цього, у локальному реєстрі для мене працювали такі дані: (реєстр: 2 ІДЕНТИФІКАЦІЯ ЗОБРАЖЕННЯ 1e847b14150e365a95d76a9cc6b71cd67ca89905e3a0400fa44381ecf00890e1, створений 2015-08-25T07: 55: 17.072):

$ curl -X GET http://localhost:5000/v2/_catalog
{"repositories":["ubuntu"]}
$ curl -X GET http://localhost:5000/v2/ubuntu/tags/list
{"name":"ubuntu","tags":["latest"]}

17

На даний момент немає підтримки пошуку для Docker Registry v2 .

По темі була давня тема . Поточний план полягає в підтримці пошуку з розширенням , яке має бути готовим до версії 2.1 .

Як обхідне рішення виконайте на машині, де працює ваш реєстр v2, наступне:

> docker exec -it <your_registry_container_id> bash
> ls /var/lib/registry/docker/registry/v2/repositories/

Зображення знаходяться в підкаталогах, що відповідають їх простору імен, наприклад jwilder/nginx-proxy


якщо команда docker exec -it <your_registry_container_id> bash не працює, спробуйте docker exec -it <your_registry_container_id> / bin / sh
KurioZ7

13

Я зміг отримати все в моєму приватному реєстрі, просто шукаючи "бібліотека":

docker search [my.registry.host]:[port]/library

Повернення (наприклад):

NAME                    DESCRIPTION   STARS     OFFICIAL   AUTOMATED
library/custom-image                  0                    
library/another-image                 0                    
library/hello-world                   0

33
З docker 1.8.1 на Ubuntu 14.04 я отримую Error response from daemon: Unexpected status code 404, що не так?
carloreggiani

4
У мене така сама проблема, команда 'docker search repositroy_ip: 5000 / busybox' повертає 404, але попередня команда 'docker push repository_ip: 5000 / busybox' вдалася
ksopyla

можливо, вам доведеться використовувати curl для небезпечних реєстрів, наприкладcurl --insecure -u "test:password" https://myregistrydomain.com:5000/v2/_catalog
Леон Мак

"Якщо ви запускаєте свій реєстр docker, не вмикаючи пошук, тоді цей інтерфейс не буде працювати, і не очевидно, чому. Я зміг додати реєстр чудово, оскільки docker-registry-host: 5000 / v1 / ping повертає HTTP 200, але при переході до зображень інтерфейс користувача повідомляє "Реєстр недоступний" b / c docker-registry-host: 5000 / v1 / search повертає HTTP 404. " github.com/atcol/docker-registry-ui/issues/…
sm4rk0

7

Перелічіть усі зображення

docker search <registry_host>:<registry_port>/

Список зображень, таких як "vcs"

docker search <registry_host>:<registry_port>/vcs

5

Я встановив веб-проект atc- / docker-registry-web, який надає мені інтерфейс користувача та шукає мій приватний реєстр. https://github.com/atc-/docker-registry-web

Він прикріплений до докерів, і ви можете просто запустити його

docker запустити -p 8080: 8080 -e REG1 = http: //registry_host.name: 5000 / v1 / atcol / docker-registry-ui

та переглянути вміст, переглядаючи registry_ui_host.name:8080


2

В даний час AFAIK не має простого способу зробити це, оскільки ця інформація повинна зберігатися за допомогою індексу, якого приватний реєстр не має. Але залежно від того, як ви запустили реєстр, у вас є 2 варіанти:

  1. якщо ви запустили реєстр без -v для зберігання даних в окремій папці хоста, ви можете спробувати docker diff <id_of_registry_container>це зробити, ви повинні отримати інформацію про зміни в контейнері fs. Усі передані зображення повинні знаходитись десь у / tmp / registry / repositories /
  2. якщо ви запустили реєстр з -v, просто перевірте вміст змонтованого каталогу на хості

Якщо ви використовували "centos" як ім'я, це повинно бути в / tmp / registry / repositories / library / centos. Ця папка буде містити текстові файли, що описують структуру зображень. Фактичні дані знаходяться в / tmp / registry / images /.


вибачте, я маю на увазі, як шукати зображення з приватного реєстру за допомогою командного рядка або http
edwardsbean

Так, я знаю, але AFAIK без індексу не дозволяє шукати зображення в приватному реєстрі. У /v1/searchреєстрі є метод api, але він вимагає серверної бази. Існує основна реалізація індексу в приватному коді реєстру ( github.com/dotcloud/docker-registry/blob/master/docker_registry/… ), але це лише надання основних функцій в автономному режимі. Кілька днів тому я знайшов це: github.com/ekristen/docker-index, але не встиг перевірити.
odk

1

Змінення відповіді з @mre, щоб отримати список лише з однієї команди (дійсно принаймні для Docker Registry v2).

docker exec -it <your_registry_container_id> ls -a /var/lib/registry/docker/registry/v2/repositories/

Також для переліку тегів сховища: docker exec -it <your_registry_container_id> ls -a / var / lib / registry / docker / registry / v2 / repositories / postgresql / _manifests / tags
Mohsen Abasi

0

Інший метод в один рядок (підставте фактичний шлях / порти, якщо потрібно).

Приклад: Припустімо загальний реєстр: запуск 2.0, запущений контейнер реєстру має файл журналу, який містить зображення та імена тегів. Я екстраполюю дані так:

grep -r -o "vars\.name=.* vars.reference=.*" /var/lib/docker/containers/* | cut -c 167-225 | sed 's/ver.*$//' | sed 's/vars\.name=//' | sed 's/ vars\.reference=/:/' | sort -u

Можливо, вам доведеться налаштувати значення скорочень, щоб отримати бажаний результат.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.