无法从 Docker 代理/镜像/缓存注册表中删除图像

Can't delete images from a Docker proxy / mirror / cache registry

运行 registry:2 图像通过 docker-compose 1.27.4,docker 本身位于 19.03.13.

注册表配置为 "pull through cache",某些人也称为“代理”或“镜像”。设置非常基本并遵循官方文档:

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
proxy:
  remoteurl: https://registry-1.docker.io

使用标准程序通过 API...

删除此注册表中的映像时
  1. 查找标签名称

    export HEADER="Accept: application/vnd.docker.distribution.manifest.v2+json"
    curl -s -H $HEADER https://<HOST>/v2/<CATALOG>/tags/list
    
  2. 找到对应的SHA

    curl -sI -k -H $HEADER https://<HOST>/v2/<CATALOG>/manifests/<TAG> 
    
  3. 通过 SHA 删除

    curl -H $HEADER -X DELETE https://<HOST>/v2/<CATALOG>/manifests/<SHA>
    

...我收到最后一个命令的 404:

404 page not found

当我对注册表配置中注释掉的 proxy 位执行相同操作时,它起作用了。

这对 来说非常熟悉,公平地说,这是有记录的。这个用例不是 - 或者是?

registry:2 图像的拉取缓存功能正是为此而设计的,拉取。不支持任何其他操作,如推送或删除,预计会出错。要在源中删除清单,您需要 运行 针对该注册表的删除命令。我不相信有任何 API 会过早地仅从缓存中删除清单,这是一个固定的 7 天过期时间。