docker私有仓库的镜像删除方式
作者:wanmei002
该文章介绍了如何使用Docker私有仓库删除镜像的步骤,包括获取Token、请求镜像列表和删除镜像的具体操作,同时,还解决了在删除镜像时遇到的MANIFEST_UNKNOWN错误,并提供了相应的解决办法
docker私有仓库的镜像删除
获取token
1. base64 用户名 密码
echo -n <你的用户名>:<你的密码> | base64 # 得到的字符串是: dXNlcm5tYWU6cGFzc3dvcmQ=
2. 先请求要请求的接口
比如我向获取所有镜像列表接口 http://127.0.0.1:5000/v2/_catalog
curl -i -X GET 'http://127.0.0.1:5000/v2/_catalog'
返回的 header 头里有
Www-Authenticate: Bearer realm="https://127.0.0.1:4000/auth",service="Registry",scope="registry:catalog:*"
- realm: 需要取 这个接口里获取 token
- service, scope 是查询参数
3. 请求接口 auth
以上面的 Www-Authenticate 信息为例子
# url 最好用 引号括住 curl -i -H'Authorization: Basic dXNlcm5tYWU6cGFzc3dvcmQ=' -X GET 'http://127.0.0.1:4000/auth?service=Registry&scope=registry:catalog:*' # 返回的数据如下 {"access_token": "aaaa.bbbb.cccc", "token": "aaaa.bbbb.cccc"} # access_token 跟 token 字段里的值是一样的
4. 拿着 token, 去请求接口
curl -i -H"Authorization: Bearer aaaa.bbbb.cccc" 'http://127.0.0.1:5000/v2/_catalog' # 返回结果 {"registry": ["aaa/bbbb"]}
请求 tag 列表接口
aaa/bbbb 是镜像
1. 去请求token
# 注意查询参数里的 scope curl -i -H'Authorization: Basic dXNlcm5tYWU6cGFzc3dvcmQ=' -X GET 'http://127.0.0.1:4000/auth?service=Registry&scope=registry:aaa/bbbb:pull'
每次请求接口的 scope 不一样 都需要去请求一次 token 接口
2. 拿着token去请求 镜像 tag 列表
curl -i -H "Authorization: Bearer dddd.eeee.ffff" 'http://127.0.0.1:5000/v2/aaa/bbbb/tags/list' {"name":"aaa/bbbb","tags":["v1.0.2","v1.0.3"]}
删除镜像
1. 先获取镜像 tag 的 sha256
curl -i -H "Authorization: Bearer aaa.bbb.ccc" -H'Accept: application/vnd.docker.distribution.manifest.v2+json' 'http://127.0.0.1:5000/v2/aaa/bbbb/manifests/v1.0.2' # 返回值 HTTP/1.1 200 OK Content-Length: 529 Content-Type: application/vnd.docker.distribution.manifest.v2+json Docker-Content-Digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc Docker-Distribution-Api-Version: registry/2.0 Etag: "sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc"
- 注意 header 头都需要,必需加全
- header 头里的 sha256 在删除的时候需要
2. 删除镜像
curl -i -XDELETE -H "Authorization: Bearer aaaa.bbbbb.cccc" 'http://127.0.0.1:5000/v2/aaa/bbbb/manifests/sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc' # 返回 202 状态码,表示成功了
- 错误:
{"errors":[{"code":"MANIFEST_UNKNOWN","message":"OCI index found, but accept header does not support OCI indexes"}]}
- 解决办法:
curl 请求的时候加上 header头:
-H "Accept: application/vnd.oci.image.manifest.v1+json" -H "Accept: application/vnd.oci.image.index.v1+json"
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。