【问题标题】:Where is docker registry:2 storing images on hostdocker registry:2 在主机上存储图像在哪里
【发布时间】:2021-12-18 14:44:36
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: 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

      【讨论】:

        猜你喜欢
        • 2019-01-28
        • 2020-10-04
        • 2016-02-08
        • 1970-01-01
        • 1970-01-01
        • 2019-01-15
        • 1970-01-01
        • 1970-01-01
        • 2015-02-05
        相关资源
        最近更新 更多