如何删除推送的Docker镜像?

kev*_*kev 4 docker docker-registry

Image 0dd747e33c96 already pushed, skipping
Image 9ebea32a283d already pushed, skipping
Image 3690474eb5b4 already pushed, skipping
Image cbf4c83202ff already pushed, skipping
Image 09ddd09520af already pushed, skipping
Run Code Online (Sandbox Code Playgroud)

如何从私有docker 注册表中删除这些镜像?(这是 v1)?我可以访问服务器。

我为什么要这么做?我正在通过 Jenkins docker 插件构建一个图像,它只是不会将更改推送到注册表。以当地作品为基础。

我也很乐意强行覆盖它们。

man*_*lds 5

首先,您的图像实际上是图像层。当您进行更改时,并不意味着所有图层都在更改。如果没有任何更改,docker 和注册表足够聪明,不会推送任何内容。这不是旧图像在推送新图像时未更新的问题,而更像是旧图像层在构建过程中未更改的问题。

在 v1 中,无法删除图像。最好的选择是更新到较新的注册表,因为 v2 已经发布很长时间了。


最新版本的 docker 发行版提供了 API。

检查用于删除镜像的 docker 分发 API 坞站

https://github.com/docker/distribution/blob/ed0b3aebb31a38ba617bb21494de9e914b6e4bed/docs/spec/api.md#deleting-an-image

删除图像

可以通过图像的名称和引用从注册表中删除图像。可以使用以下请求格式发出删除:

DELETE /v2/<name>/manifests/<reference> 
Run Code Online (Sandbox Code Playgroud)

对于删除,引用必须是摘要,否则删除将失败。如果图像存在并且已成功删除,将发出以下响应:

202 Accepted Content-Length: None 
Run Code Online (Sandbox Code Playgroud)

如果图像已被删除或不存在,则会发出 404 Not Found 响应。

注意 从注册表版本 2.3 或更高版本中删除清单时,在 HEAD 或 GET 清单时必须使用以下标头以获得要删除的正确摘要:接受:application/vnd.docker.distribution.manifest.v2+json