2014-08-29 49 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 
相關問題