DockerRegistryV2删除镜像

来源:转载

DockerRegistryV2删除镜像 博客分类: docker
使用版本


测试版本: registry-2.4.1

镜像删除步骤 1、通过
/v2/<镜像名称
>/manifests/ >的方式获取镜像的digest


注意获取的请求头中需要加


Accept: application/vnd.docker.distribution.manifest.v2+json


否则获取不到正确的digest(虽然也能够获取到一个digest,但是之后的删除操作会失败)


没加那个header值导致失败的返回值是:


404{"errors":[{"code":"MANIFEST_UNKNOWN","message":"manifest unknown"}


2、删除镜像


DELETE /v2//manifests/


ps:我因为有加认证的服务,所以获取digest和删除操作之前都会去认证服务获取token才能操作。

删除时容易出现的问题


1、镜像删除不完整,只有manifests被删除了 ,详细见:https://github.com/docker/distribution/issues/1755 2、未在registry的配置文件中配置





delete:






enabled:true







完整问题参见:http://dockone.io/question/883





3、registry 配置可能出现的问题,参考官网配置文件介绍: https://docs.docker.com/registry/configuration/#delete 4、镜像无法完全被删除,删除的只是tag信息以及相关联的manifest实际通过_catlog获取该镜像的repository还是存在的。 但是查询tag确实不存在被删除的tag信息了。(如果要删除这个目录,估计只能手动删除文件目录了,不过这样会导致相关联的layer被破坏)

官网介绍

Deleting an Image


通过name和reference删除镜像.删除的api为如下(DELETE方式,而不是post 或者get):

DELETE /v2//manifests/

对于删除,reference必须是镜像的digest否则会失败. 假如存在镜像并且被成功删除,则返回如下响应(response)

202 Accepted
Content-Length: None

实际测试返回(使用postman):


Status202 Accepted


返回值body :(空)


返回值headers:


Content-Length→
0 Content-Type→
text/plain; charset=utf-8 Date→
Thu, 03 Nov 2016 09:16:19 GMT Docker-Distribution-Api-Version→
registry/2.0 X-Content-Type-Options→
nosniff


假如镜像已经被删除,则响应http状态为:404 Not Found



注意删除manifest时,版本是2.3或者更高版本,通过HEAD或者GET方式获取digest时候需要在请求头header中加如下请求头(否则会删除失败):


Accept: application/vnd.docker.distribution.manifest.v2+json http://blog.csdn.net/ismr_m/article/details/53023515

分享给朋友:
您可能感兴趣的文章:
随机阅读: