【问题标题】:Where is docker registry:2 storing images on hostdocker registry:2 在主机上存储图像在哪里
【发布时间】:2021-12-18 14:44:36
【问题描述】:
【问题讨论】:
标签:
docker
docker-for-mac
【解决方案1】:
声明“默认情况下,注册表将其数据存储在本地文件系统上”,但它在哪里。 -我正在为 Mac 运行 Docker?
默认情况下在容器内它位于/var/lib/registry。每个容器都有自己的读/写层作为覆盖文件系统的一部分(所有图像层都是只读的)。这存储在 docker 主机上的 /var/lib/docker 中,可能在容器或覆盖子目录下,然后在每个容器的唯一目录名称下。然后,在 Mac 上的 Docker Desktop 中,在 VM 中。您可能可以执行到容器中以查看此路径,但我不建议直接根据您的请求修改内容。
我只是想要一种简单的方法来删除本地图像,也许只是找到这个默认主机位置的问题 - 是的,我看起来可以只使用自定义卷。
首先,只是为了验证您的意思是删除注册表中的图像,而不是本地 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,可让您定义自己的清理策略。
【解决方案2】:
默认情况下,注册容器将数据保存在容器内的/var/lib/registry 中。您可以在主机上绑定挂载本地目录,就像示例中所做的-v /mnt/registry:/var/lib/registry 一样;在这种情况下,数据将保存在 /mnt/registry 的主机上。您也可以预先创建一个像docker volume create registry 这样的卷并绑定-v registry:/var/lib/registry;在这种情况下,数据将存储在您主机上的/var/lib/docker/volumes。