什么是Docker推送到私有注册表的X-Registry-Auth的内容

时间:2014-08-29 01:21:29

标签: docker docker-registry

使用REST API将Docker镜像推送到私有注册表时,X-Registry-Auth标头的内容应该是什么?每Using Docker API to push to private registry,需要一个X-Registry-Auth标头。 https://groups.google.com/forum/#!topic/docker-user/vXcA8fsCNZM建议该值应为以下格式的base64编码JSON字符串:

{'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回复。

也许问题只是我不知道应该是什么值。我怎样才能确定它们? Docker似乎有办法; sudo docker push $REGISTRY/$NAMESPACE/$REPOSITORY:$TAG工作正常。

4 个答案:

答案 0 :(得分:1)

我有一个私人nexus docker repo(Docker Api v2),对我来说,这就是解决方案:

 XRA=`echo "{ \"username\": \"yourname\", \"password\": \"yourpass\", \"email\": \"youmail@example.org\" }" | base64 --wrap=0`
 curl  -X POST  -d "" -H "X-Registry-Auth: $XRA" http://localhost:4243/images/create?fromImage=private.host:19003/imagename&tag=latest

答案 1 :(得分:1)

以下在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 }
})

答案 2 :(得分:0)

我认为您在编码中缺少两层。生成标题的实际代码(来自github

def encode_header(auth):
    auth_json = json.dumps(auth).encode('ascii')
    return base64.b64encode(auth_json)

def encode_full_header(auth):
    """ Returns the given auth block encoded for the X-Registry-Config header.
    """
    return encode_header({'configs': auth})

所以你需要{' configs':[auth entries数组]}的外部地图,所有json-then-base64编码。

答案 3 :(得分:0)

检查您的身份验证环境变量问题

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

如果它们是正确的,您将看到“登录成功”。

我怀疑$ NAMESPACE应匹配$ USERNAME。 尝试使用v1.13作为版本而不是v1。