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
}