docker registry:2 在主机上存储图像的位置

Where is docker registry:2 storing images on host

我知道您可以使用 curl <registry name>:5009/v2/_catalog 列出图片。

来自这里: https://docs.docker.com/registry/deploying/#storage-customization

是说“默认情况下,注册表将其数据存储在本地文件系统上”,但它在哪里。 -我是 运行 Docker 为了 Mac?

我只是想要一种简单的方法来删除本地图像,也许这是找到这个默认主机位置的问题 - 是的,我看起来可以只使用自定义卷。

我仍然很好奇这个默认存储的位置。

默认情况下,注册表容器将 /var/lib/registry 中的数据保存在容器内。您可以像示例 -v /mnt/registry:/var/lib/registry 那样绑定挂载主机上的本地目录;在这种情况下,数据将保存在您主机上的 /mnt/registry。您还可以预先创建一个卷,如 docker volume create registry 并绑定 -v registry:/var/lib/registry;在这种情况下,数据将存储在您主机上的 /var/lib/docker/volumes

Is is stated "By default, the registry stores its data on the local filesystem", but where is that. -I am running Docker For Mac?

默认情况下,在容器内它位于 /var/lib/registry。每个容器都有自己的 read/write 层作为覆盖文件系统的一部分(所有图像层都是只读的)。这存储在 docker 主机上的 /var/lib/docker 中,可能在容器或覆盖子目录下,然后在每个容器的唯一目录名称下。然后,在 Mac 上的 Docker 桌面内,是在虚拟机内。您可能会执行到容器中以查看此路径,但我不建议直接根据您的要求修改内容。


I just want an easy way to delete local images, and maybe it is a matter of finding this default host location - yes I looks like I could just use a custom volume.

首先,只是为了验证您的意思是删除注册表中的图像,而不是本地 docker 引擎上的图像。如果是后者,可以运行docker image prune.

假设您需要 运行 注册表服务器,您需要将设置 REGISTRY_STORAGE_DELETE_ENABLED=true 传递给注册表(作为环境变量,或通过设置关联的 yaml 配置) .然后你可以调用清单删除API。您需要获取摘要然后调用

curl -X DELETE http://<registry>:5000/v2/<repo>/manifests/<digest>

完成后,您需要在注册表上 运行 一个 garbage collection,同时没有写入发生(通过将服务器设置为只读、选择空闲时间或停止注册表并且 运行针对同一卷设置一个单独的容器):

docker exec registry /bin/registry garbage-collect /etc/docker/registry/config.yml --delete-untagged

为了简化 API 调用,我有一个 regclient 项目,其中包括 regctl image delete ...regctl tag delete ...(后者仅删除一个标签,即使清单被多次引用)。如果您想自动执行清理策略,可以在同一个项目中使用 regclient/regbot 来定义自己的清理策略。