2015-08-11 8 views
8

Мы хотим проверить, существует ли изображение в общем реестре (Docker Hub), прежде чем мы начнем развертывание. С API v1 мы просто запросим https://index.docker.io/v1/repositories/gliderlabs/alpine/tags/3.2.Что такое канонический способ увидеть, существует ли изображение в общедоступном реестре докеров?

Но теперь официальный API для реестра - v2, каков официальный способ проверки наличия изображения в public реестра?

v1

$ curl -i https://index.docker.io/v1/repositories/gliderlabs/alpine/tags/latest 
HTTP/1.1 200 OK 
Server: nginx/1.6.2 
Date: Tue, 11 Aug 2015 10:02:09 GMT 
Content-Type: application/json 
Transfer-Encoding: chunked 
Vary: Cookie 
X-Frame-Options: SAMEORIGIN 
Strict-Transport-Security: max-age=31536000 

[{"pk": 20307475, "id": "5bd56d81"}, {"pk": 20355979, "id": "511136ea"}] 

v2:

$ curl -i https://index.docker.io/v2/repositories/gliderlabs/alpine/tags/latest 
HTTP/1.1 301 MOVED PERMANENTLY 
Server: nginx/1.6.2 
Date: Tue, 11 Aug 2015 10:04:20 GMT 
Content-Type: text/html; charset=utf-8 
Transfer-Encoding: chunked 
X-Frame-Options: SAMEORIGIN 
Location: https://index.docker.io/v2/repositories/gliderlabs/alpine/tags/latest/ 
Strict-Transport-Security: max-age=31536000 

$ curl -i https://index.docker.io/v2/repositories/gliderlabs/alpine/tags/latest/ 
HTTP/1.1 301 MOVED PERMANENTLY 
Server: nginx/1.6.2 
Date: Tue, 11 Aug 2015 10:04:26 GMT 
Content-Type: text/html; charset=utf-8 
Transfer-Encoding: chunked 
X-Frame-Options: SAMEORIGIN 
Location: https://registry.hub.docker.com/v2/repositories/gliderlabs/alpine/tags/latest/ 
Strict-Transport-Security: max-age=31536000 

$ curl -i https://registry.hub.docker.com/v2/repositories/gliderlabs/alpine/tags/latest/ 
HTTP/1.1 200 OK 
Server: nginx/1.6.2 
Date: Tue, 11 Aug 2015 10:04:34 GMT 
Content-Type: application/json 
Transfer-Encoding: chunked 
Vary: Cookie 
X-Frame-Options: SAMEORIGIN 
Allow: GET, DELETE, HEAD, OPTIONS 
Strict-Transport-Security: max-age=31536000 

{"name": "latest", "full_size": 5250074, "id": 130839, "repository": 127805, "creator": 152141, "last_updater": 152141, "image_id": null, "v2": false} 

не Я должен придерживаться v1 URL, даже если он сейчас вроде устаревшим или использовать v2 URL, но нет документация об этом? Если я использую v2, должен ли я использовать непосредственно https://registry.hub.docker.com/v2/ или использовать https://index.docker.io/v1/ и следовать перенаправлениям?

+1

Возможный дубликат: http://stackoverflow.com/ Вопросы/30113726/docker-registry-2-0-api-v2 – Kasisnu

+0

Это не дубликат, связанный вопрос касается частного реестра, который вы можете запускать самостоятельно, этот вопрос касается публичного реестра, то есть докер-хаба. – jtblin

+0

v2 api указан на https://github.com/docker/distribution/blob/master/docs/spec/api.md. Это часть проекта распространения, который позволяет запускать частный реестр. – Kasisnu

ответ

1

Сценарий Upstream's download-frozen-image-v2.sh должен быть полезен, по крайней мере, для примера с приложением API (https://github.com/docker/docker/blob/6bf8844f1179108b9fabd271a655bf9eaaf1ee8c/contrib/download-frozen-image-v2.sh#L47-L54).

Главный ключ является то, что вам нужно ударять registry-1.docker.io вместо index.docker.io, и что вам нужно «маркер» из auth.docker.io (https://auth.docker.io/token?service=registry.docker.io&scope=repository:gliderlabs/alpine:pull), даже если вы только запрашивающий доступ только для чтения к публичной библиотеке , После того, как вы получили этот маркер, вы можете нажать https://registry-1.docker.io/v2/gliderlabs/alpine/manifests/latest с Authorization заголовок, который либо возвращает JSON манифест изображения или без ошибок с 404.

token="$(curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$image:pull" | jq --raw-output .token)" 

curl -fsSL -H "Authorization: Bearer $token" "https://registry-1.docker.io/v2/$image/manifests/$digest" 

 Смежные вопросы

  • Нет связанных вопросов^_^