如何从私有Docker Registry中“删除”映像?

Aag*_*eif 6 docker-registry docker-api

我正在为Docker编写API客户端,并且注册表API难以使用。我正在尝试从注册表中删除图像,但是我一直收到此错误

[ { code: 'UNSUPPORTED', message: 'The operation is unsupported.' } ]
Run Code Online (Sandbox Code Playgroud)

我要做到这一点的步骤如下,

 >  GET http://localhost:5000/v2/
  >  registry/2.0
 >  registry/2.0
 >  GET http://localhost:5000/v2/_catalog/
  >  { repositories: [ 'alpine' ] }
 >  GET http://localhost:5000/v2/alpine/tags/list
  >  { name: 'alpine', tags: [ 'latest' ] }
 >  HEAD http://localhost:5000/v2/alpine/manifests/latest
  >  sha256:df73ed0973f15f40496c148330f9b559f0a5583c03f6ac8d26adadf6f4690aff
 >  DELETE http://localhost:5000/v2/alpine/manifests/sha256:df73ed0973f15f40496c148330f9b559f0a5583c03f6ac8d26adadf6f4690aff
[ { code: 'UNSUPPORTED', message: 'The operation is unsupported.' } ]
Run Code Online (Sandbox Code Playgroud)

编辑

自找到REGISTRY_STORAGE_DELETE_ENABLED变量以来,我正在更新我的问题。

我现在这样运行注册表容器,

docker run -d -p 5000:5000 -e REGISTRY_STORAGE_DELETE_ENABLED=true --name registry2 registry
Run Code Online (Sandbox Code Playgroud)

会产生一个新的错误,

[ { code: 'MANIFEST_UNKNOWN', message: 'manifest unknown' } ]
Run Code Online (Sandbox Code Playgroud)

显然,该UNSUPPORTED错误确实意味着该特定功能已被禁用。

但是,我读到的所有内容都表明删除清单的实体引用(来自HEAD请求的摘要)应删除存储库。我只想使我的私有注册表中的存储库无法访问,我认为已将其删除。

如何从专用注册表中删除映像,以使其不被拉出?

Uwe*_*nus 2

即使这是一个老问题:解决方案很简单。

DELETE http://localhost:5000/v2/alpine/manifests/sha256:df73ed0973f15f40496c148330f9b559f0a5583c03f6ac8d26adadf6f4690aff
Run Code Online (Sandbox Code Playgroud)

是错误的,因为摘要的前缀是sha256:. 简单地删除前缀,然后就可以删除:

DELETE http://localhost:5000/v2/alpine/manifests/df73ed0973f15f40496c148330f9b559f0a5583c03f6ac8d26adadf6f4690aff
Run Code Online (Sandbox Code Playgroud)