Docker удаленного API вытащить из личного реестра Docker хаб

Я пытаюсь извлечь образы докеров из частного репозитория, размещенного в Docker-хабе, https://registry.hub.docker.com/u/myname/myapp используя это с помощью удаленного API докера. В документе не ясно, как указать учетные данные для проверки подлинности в запросе POST, как это

curl -XPOST -H "X-Registy-Auth: base64_encoded_authconfig_object" "http://localhost:4243/images/create?fromImage=myname/myapp"

Это также не уточняет, как именно генерируется authconfig.

Это говорит об отправке в кодированном json-коде со структурой 64 с такой структурой:

{
  "index_url": {
    "username": "string",
    "password": "string",
    "email": "string",
    "serveraddress": "string"
  }
}

Но не объясняет, что такое index_url и serveraddress. Они

index_url = https://registry.hub.docker.com/u/myname/myapp
serveraddress = https://registry.hub.docker.com

Вышеуказанные конфигурации дают мне 404, вероятно, частное хранилище реестра не распознается.

Я также попытался кодировать в base 64 содержимое моего ~/.dockercfg

{
  "https://index.docker.io/v1/": {
    "auth":"xxxxxxxxxxxxxxxxxxx==",
    "email":"myname@myemail.com"
  }
}

Не могли бы вы рассказать мне, как сгенерировать объект authconfig в кодировке base64 и заставить работать приведенную выше команду curl?

заранее спасибо

Версия докера

Client version: 0.11.1
Client API version: 1.11
Go version (client): go1.2.1
Git commit (client): fb99f99
Server version: 0.11.1
Server API version: 1.11
Git commit (server): fb99f99
Go version (server): go1.2.1

2 ответа

Я была такая же проблема.

Вот "необработанный" объект AuthConfig, который вы должны использовать для передачи учетных данных:

{
  "Имя пользователя": "your_registry_username_or_email",
  "пароль":"*****",
  "auth":"",    // оставляем пустым
  "Электронная почта":"your@email.tld"
}

Затем вы должны "закодировать" его с помощью Base64.

Вы не сказали, какой язык вы используете, но при необходимости этот удивительный сайт позволит вам кодировать ваш объект в один клик. Или из оболочки:

echo '{"username":"username","password":"*****", "auth":"","email":"your@email.tld"}' | base64


Затем просто передайте закодированное значение в заголовок:

X-Registry-Auth: eyJ1c2VybmFtZSI6InlvdXJfcmVnaXN0cnlfdXNlcm5hbWVfb3JfZW1haWwiLCJwYXNzd29yZCI6IioqKioqIiwiYXV0aCI6IiIsImVtYWlsIjoieW91ckBlbWFpbC50bGQifQ==

Вот рабочий пример использования curl а также

  • реестр доступен на r.getitlive.io
  • демон докера, слушающий "192.168.60.10:8888":
curl -X POST -d "" \
  -H "X-Registry-Auth: eyJ1c2VybmFtZSI6InlvdXJfcmVnaXN0cnlfdXNlcm5hbWVfb3JfZW1haWwiLCJwYXNzd29yZCI6IioqKioqIiwiYXV0sbiWIWIWIWIFiWiFi6
  'Http://192.168.60.11:8888/images/create?fromImage=r.getitlive.io/cool/repo&tag=latest'

Примечание: я не мог заставить это работать (пока), помещая конечную точку удаленного реестра /URL в serveraddress поле объекта AuthConfig. Вот почему я добавляю хост реестра в fromImage=параметр.

Из этого объединенного запроса извлечения Docker, кажется, что X-Registry-Auth заголовок должен быть строкой json в кодировке Base-64 вида

{
  'username': string,
  'password': string,
  'email': string,
  'serverddress' : string
}

другая ссылка ссылка

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