我正在尝试使用HTTP API将图像上传到我的私有docker注册表,但不幸的是没有成功。
显然,我还没有完全理解上传过程,并希望询问是否有人可以详细解释一下或指导我正确的方向。
到目前为止,我已经尝试了以下curl命令。 为了进行实验,我只使用空的alpine镜像。 为此,我使用
然后,我将此存档文件解压缩到一个名为alpine的目录中。 这是它的内容:
根据文档,我应该首先通过向 /v2//blobs/uploads/ URL 发送 POST 请求来初始化上传。为此,我执行以下命令:
显然,我还没有完全理解上传过程,并希望询问是否有人可以详细解释一下或指导我正确的方向。
到目前为止,我已经尝试了以下curl命令。 为了进行实验,我只使用空的alpine镜像。 为此,我使用
docker pull alpine
将其下载到我的工作站,然后使用docker save -o alpine.tar alpine
创建tar归档文件。然后,我将此存档文件解压缩到一个名为alpine的目录中。 这是它的内容:
ls -R alpine
alpine:
39cb81dcd06e3d4e2b813f56b72da567696fa9a59b652bd477615b31af969239
e7d92cdc71feacf90708cb59182d0df1b911f8ae022d29e8e95d75ca6a99776a.json
manifest.json
alpine/39cb81dcd06e3d4e2b813f56b72da567696fa9a59b652bd477615b31af969239:
json
layer.tar
VERSION
根据文档,我应该首先通过向 /v2//blobs/uploads/ URL 发送 POST 请求来初始化上传。为此,我执行以下命令:
curl -X POST -L -D headers $DOCKER_HOST/v2/alpine/blobs/uploads
答案如下:
cat headers
HTTP/1.1 301 Moved Permanently
Docker distribution api version: registry/2.0
location: /v2/alpine/blobs/uploads/
Date: Tu, 21 Jan 2020 12:42:55 GMT
content length: 0
HTTP/1.1 202 Accepted
content length: 0
Docker distribution api version: registry/2.0
Docker upload guide: ed595b3c-1236-46c8-a759-14187fc60e7d
Location: http://<IPADDRESS>/v2/alpine/blobs/uploads/ed595b3c-1236-46c8-a759-14187fc60e7d?_state=GjzU_y-YDQherf4xXO57KyEonSSSwNEM8FiF8rmNfuN7Ik5hbWUiOiJhbHBpbmUiLCJVVUlEIjoiZWQ1OTViM2MtMTIzNi00NmM4LWE3NTktMTQxODdmYzYwZTdkIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIwLTAxLTIxVDEyOjQyOjU1LjMxNDYzNTg0NVoifQ%3D%3D
Range: 0-0
X Content Type Options: nosniff
Date: Tu, 21 Jan 2020 12:42:55 GMT
现在我想进行一个单块上传,如docker-registry文档中所述。
为此,我发出以下curl请求:
url=http://<IPADDRESS>/v2/alpine/blobs/uploads/ed595b3c-1236-46c8-a759-14187fc60e7d?_state=GjzU_y-YDQherf4xXO57KyEonSSSwNEM8FiF8rmNfuN7Ik5hbWUiOiJhbHBpbmUiLCJVVUlEIjoiZWQ1OTViM2MtMTIzNi00NmM4LWE3NTktMTQxODdmYzYwZTdkIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIwLTAxLTIxVDEyOjQyOjU1LjMxNDYzNTg0NVoifQ%3D%3D?digest=sha256:39cb81dcd06e3d4e2b813f56b72da567696fa9a59b652bd477615b31af969239
layerpath=/home/user/alpine/39cb81dcd06e3d4e2b813f56b72da567696fa9a59b652bd477615b31af969239/layer.tar
curl -X PUT -H "Content-Type=application/octet-stream" --data-binary @"$layerpath" $url
针对这个问题,我收到了一个对我毫无意义的答案:
{"errors":[{"code": "BLOB_UPLOAD_INVALID", "message": "blob upload invalid", "detail":212}]}
我不知道我做错了什么。非常感谢任何帮助。
docker login my_server && docker tag random_image:tag my_server/path/to/myrandom_image:tag && docker push my_server//path/to/myrandom_image:tag
- Zeitounatordocker save
来构建一个示例镜像,以便我可以进行实验。具体过程如下:我将镜像作为tar归档文件获取,然后需要将它们加载到Docker注册表中,以便生产机器可以通过docker pull
命令加载这些镜像。 - H4x9r