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

kal*_*tar 6 docker docker-registry

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

{'username': string, 'password': string, 'email': string, 'serveraddress' : string}
Run Code Online (Sandbox Code Playgroud)

设置合适的环境变量后,我做了:

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
Run Code Online (Sandbox Code Playgroud)

得到403 Forbidden回应.

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

小智 5

我有一个私有的 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
Run Code Online (Sandbox Code Playgroud)


Nei*_*tin 1

我认为您的编码中缺少两层。生成标头的实际代码(来自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})
Run Code Online (Sandbox Code Playgroud)

因此,您需要一个 { 'configs': [ array of auth Entry ] } 的外部映射,全部采用 json-then-base64 编码。