Что такое X-Registry-Auth для отправки Docker в частный реестр

Каким должно быть содержимое заголовка X-Registry-Auth при отправке образа Docker в частный реестр с помощью REST API? Согласно Использование Docker API для отправки в частный реестр требуется заголовок X-Registry-Auth. https://groups.google.com/forum/#!topic/docker-user/vXcA8fsCNZM предполагает, что значение должно быть строкой JSON в кодировке base64 в форме:

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

После установки подходящих переменных среды я сделал:

XRA=`echo "{\"username\": \"${USERNAME}\", \"password\": \"${PASSWORD}\", \"email\": \"${EMAIL_ADDRESS}\", \"serveraddress\" : \"${SERVER_ADDRESS}\"}" | base64 --wrap=0`
curl  -v --request POST --header "X-Registry-Auth: $XRA" http://$DOCKER_HOST/v1/images/$REGISTRY/$NAMESPACE/$REPOSITORY?tag=$TAG

И получите ответ 403 Forbidden.

Возможно, проблема в том, что я не знаю, какими должны быть значения. Как я могу их определить? У Докера, похоже, есть способ; sudo docker push $REGISTRY/$NAMESPACE/$REPOSITORY:$TAG работает нормально.


person kalantar    schedule 29.08.2014    source источник
comment
С помощью этого я смог нажать на свою учетную запись Docker Hub. Однако кажется, что это работает лучше (по крайней мере, для меня), если изображение уже было отправлено первым с использованием docker login и docker push.   -  person Vish    schedule 06.08.2016
comment
Ваше решение работает для меня.   -  person Valéry    schedule 22.11.2017


Ответы (4)


У меня был частный репозиторий Nexus Docker (Docker Api v2), и для меня это было решением:

 XRA=`echo "{ \"username\": \"yourname\", \"password\": \"yourpass\", \"email\": \"[email protected]\" }" | base64 --wrap=0`
 curl  -X POST  -d "" -H "X-Registry-Auth: $XRA" http://localhost:4243/images/create?fromImage=private.host:19003/imagename&tag=latest
person Miguel Ángel Fernández    schedule 18.11.2016

В node.js у меня сработало следующее (после нескольких часов разочаровывающих испытаний...):

var authInfo2 = `{\"username\": \"${user}\", \"password\": \"${passwd}\", \"email\": \"${email}\", \"serveraddress\": \"${registry}\"}`

var authInfo = Buffer.from(authInfo2).toString('base64')

var result = await fetch(url, {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'X-Registry-Auth' : authInfo }
})
person Chris May    schedule 08.06.2018
comment
Все, что связано с Docker API, — это часы разочаровывающих испытаний, моя рабочая нагрузка — это функция в день. Слишком медленно, слишком утомительно. Просто делюсь здесь проблемами кодирования, хахха. Приятного аппетита. - person SEQOY Development Team; 08.01.2021


Чтобы проверить проблему с переменными среды аутентификации

docker login --username $USERNAME --password $PASSWORD --email $EMAIL_ADDRESS $SERVER_ADDRESS

Если они верны, вы увидите «Вход выполнен успешно».

Я подозреваю, что $NAMESPACE должно соответствовать $USERNAME. Попробуйте использовать v1.13 в качестве версии вместо v1.

person esnible    schedule 19.09.2014