2014-08-29 113 views
3

使用REST API将Docker镜像推送到私人注册表时,X-Registry-Auth头文件的内容应该是什么?根据Using Docker API to push to private registry,需要X注册表验证标头。 https://groups.google.com/forum/#!topic/docker-user/vXcA8fsCNZM建议值应该是形式的base64编码的JSON字符串:什么是X-Registry-Auth for Docker推送到私人注册表的内容

{'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工作得很好。

+0

我能够以此来推到我的泊坞枢纽帐户。然而,如果一个图像已经被第一次使用“docker login”和“docker push”推送,它似乎会更好地工作(至少对我而言)。 – Vish 2016-08-06 05:24:58

+0

您的解决方案适用于我。 – 2017-11-22 10:28:27

回答

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条目的阵列]}的外地图,所有JSON-然后-base64编码。

0

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

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

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

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

1

我有一个私人的Nexus泊坞窗式回购(泊坞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 
相关问题