docker registry 2.3无法删除镜像问题

     友谊的小船,说翻就翻。registry的镜像,说不能删就不能删...

      前端时间和同事一起开发私有registry。一开始调试都是基于镜像registry 2.0的容器,根据docker registry API文档所写的API封装都挺正常的。结果今天将registry容器替换成基于registry 2.3的容器以后,镜像出现了无法删除的问题。

     研究了半天的文档,也没觉得自己哪一步做错了:

     1. 获取镜像列表, GET /v2/_catalog 

docker registry 2.3无法删除镜像问题_第1张图片
里面正好有一个registry镜像

     2. 获取registry镜像的tag列表, GET /v2/registry/tags/list

docker registry 2.3无法删除镜像问题_第2张图片
tag是2.3.0

 3. 获取镜像的Digest, GET /v2/registry/manifests/2.3.0

docker registry 2.3无法删除镜像问题_第3张图片

                                                    从回应的头部Docker-Content-Digest中提取Digest,注意这里的Digest的内容包括了"sha256:"

4. 执行删除, DELETE /v2/registry/manifests/sha256:388....

docker registry 2.3无法删除镜像问题_第4张图片

WTF..不支持的删除动作?

  registry 2.3.0竟然不支持删除镜像动作。这明显是开历史倒车。先去官网看了下registry API文档,和之前看的是一样的,说明这份文档有可能没有更新。只能去github上看下有没有更新的文档。项目的路径在:https://github.com/docker/distribution. github上的文档比官网上的文档多了很多。

https://github.com/docker/distribution/blob/master/docs/configuration.md

docker registry 2.3无法删除镜像问题_第5张图片
这里提到405引起的原因可能是delete被配置为禁用了。

    registry的配置在哪里?这个在docker官网上的文档没有丝毫提及,而在github源码仓库中有详细的描述:https://github.com/docker/distribution/blob/master/docs/configuration.md.

    正好在其中提到了改写registry配置文件的方法:

docker run -d -p 5000:5000 --restart=always --name registry -v `pwd`/config.yml:/etc/docker/registry/config.yml   registry:2

   registry的配置文件就在registry容器的/etc/docker/registry/config.yml目录下,如下示例:

docker registry 2.3无法删除镜像问题_第6张图片

delete{enabled: true}即使开启registry删除镜像功能

  只要按照配置文档,编写正确的registry配置文件, 并且按照以上改写registry 配置文件的启动方法,即可实现删除镜像的操作。

你可能感兴趣的:(docker registry 2.3无法删除镜像问题)