2015-10-27 44 views
1

我正嘗試使用以下API將Docker圖像(tarball)上載到私人Docker註冊表中。 我下面這裏的文檔:http://docs.docker.com/registry/spec/api/使用API​​ v2將圖像上傳到Docker Registry時出錯

第1步:啓動上傳和獲取位置URL

$ curl -v -X POST http://localhost:5000/v2/hello-world/blobs/uploads/  * About to connect() to localhost port 5000 (#0) 
* Trying ::1... 
* Connected to localhost (::1) port 5000 (#0) 
> POST /v2/hello-world/blobs/uploads/ HTTP/1.1 
> User-Agent: curl/7.29.0 
> Host: localhost:5000 
> Accept: */* 
> 
< HTTP/1.1 202 Accepted 
< Content-Length: 0 
< Docker-Distribution-Api-Version: registry/2.0 
< Docker-Upload-Uuid: dd319793-f017-45b3-afe4-c8102363a8df 
< Location: http://localhost:5000/v2/hello-world/blobs/uploads/dd319793-f017-45b3-afe4-c8102363a8df?_state=SB2605fFM_7KNkYTHjVrVQVT62dufwXNTw9QzO2_aRR7Ik5hbWUiOiJoZWxsby13b3JsZCIsIlVVSUQiOiJkZDMxOTc5My1mMDE3LTQ1YjMtYWZlNC1jODEwMjM2M2E4ZGYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTUtMTAtMjdUMjI6MjU6MjEuMTM0MTI5MDNaIn0%3D 
< Range: 0-0 
< Date: Tue, 27 Oct 2015 22:25:21 GMT 
< Content-Type: text/plain; charset=utf-8 
< 
* Connection #0 to host localhost left intact 

第2步:使用位置網址上傳實際泊塢窗圖像

$ curl -v -H "Content-type: application/octet-stream" -H "Content-Length: 13824" --data-binary @/tmp/hello-world.tar -X PUT -L "http://localhost:5000/v2/hello-world/blobs/uploads/dd319793-f017-45b3-afe4-c8102363a8df?_state=SB2605fFM_7KNkYTHjVrVQVT62dufwXNTw9QzO2_aRR7Ik5hbWUiOiJoZWxsby13b3JsZCIsIlVVSUQiOiJkZDMxOTc5My1mMDE3LTQ1YjMtYWZlNC1jODEwMjM2M2E4ZGYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTUtMTAtMjdUMjI6MjU6MjEuMTM0MTI5MDNaIn0%3D&digest=tarsum.v2+sha256:97bbb955c700a6414fd48ae147986e9b42c0508c8a766cea61e7e3badf0f7dde" 
* About to connect() to localhost port 5000 (#0) 
* Trying ::1... 
* Connected to localhost (::1) port 5000 (#0) 
> PUT /v2/hello-world/blobs/uploads/dd319793-f017-45b3-afe4-c8102363a8df?_state=SB2605fFM_7KNkYTHjVrVQVT62dufwXNTw9QzO2_aRR7Ik5hbWUiOiJoZWxsby13b3JsZCIsIlVVSUQiOiJkZDMxOTc5My1mMDE3LTQ1YjMtYWZlNC1jODEwMjM2M2E4ZGYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTUtMTAtMjdUMjI6MjU6MjEuMTM0MTI5MDNaIn0%3D&digest=tarsum.v2+sha256:97bbb955c700a6414fd48ae147986e9b42c0508c8a766cea61e7e3badf0f7dde HTTP/1.1 
> User-Agent: curl/7.29.0 
> Host: localhost:5000 
> Accept: */* 
> Content-type: application/octet-stream 
> Content-Length: 13824 
> Expect: 100-continue 
> 
* Done waiting for 100-continue 
< HTTP/1.1 400 Bad Request 
< Content-Type: application/json; charset=utf-8 
< Docker-Distribution-Api-Version: registry/2.0 
< Date: Tue, 27 Oct 2015 22:29:02 GMT 
< Content-Length: 131 
* HTTP error before end of send, stop sending 
< 
{"errors":[{"code":"DIGEST_INVALID","message":"provided digest did not match uploaded content","detail":"digest parsing failed"}]} 
* Closing connection 0 

此外,我使用sha256sum如下:

$ sha256sum /tmp/hello-world.tar            
97bbb955c700a6414fd48ae147986e9b42c0508c8a766cea61e7e3badf0f7dde /tmp/hello-world.tar 

我在這裏可能做錯了什麼?如何解決DIGEST_INVALID錯誤?

回答

1

下面是一個簡單的例子,應該讓您的軌道上:

local reponame=foo/bar 
local uploadURL 
local numBytes=10000000 # 10 Megabytes 

uploadURL=$(curl -siL -X POST "https://registrydomain/v2/$reponame/blobs/uploads/" | grep 'Location:' | cut -d ' ' -f 2 | tr -d '[:space:]') 

blobDigest="sha256:$(head -c $numBytes /dev/urandom | tee upload.tmp | shasum -a 256 | cut -d ' ' -f 1)" 

echo "Uploading Blob of 10 Random Megabytes" 
time curl -T upload.tmp --progress-bar "$uploadURL&digest=$blobDigest" > /dev/null 
相關問題