当前位置: 首页 > 面试题库 >

用于持久性数据的Docker卷-仅通过容器路径就足够了吗?

高修筠
2023-03-14
问题内容

据我了解,Docker卷允许在Docker容器中指定将在Docker主机上共享/存储的目录/文件。例如postgres Dockerfile包含以下行

VOLUME /var/lib/postgresql/data

因此,这意味着它/var/lib/postgresql/data实际上将“存储”在主机上,并且我将可以从主机系统访问该文件。例如,当我检查pg容器时:

"Mounts": [
        {
            "Name": "4fc1fe18d93fd2090f63619edc5d6244e9821805a2e070a0235d9305b2dfe80f",
            "Source": "/mnt/sda1/var/lib/docker/volumes/4fc1fe18d93fd2090f63619edc5d6244e9821805a2e070a0235d9305b2dfe80f/_data",
            "Destination": "/var/lib/postgresql/data",
            "Driver": "local",
            "Mode": "",
            "RW": true
        }
    ],

这意味着我可以在Source路径下的主机上找到卷。我想知道是什么意思4fc1fe18d93fd2090f63619edc5d6244e9821805a2e070a0235d9305b2dfe80fSource路径。我在Docker主机上找不到具有此类ID的容器或图像。

我无法理解的一件事是,似乎当我删除容器并重新创建它时,Source路径是不同的,实际上没有数据持久存在…

因此,对于数据持久性而言,我似乎必须同时添加具有主机路径和容器路径的卷,以强制其始终将数据存储在同一路径下-这是正确的吗?


问题答案:

在“ 如何列出Docker容器中的卷?”之后,我编写了一个脚本(updateDataContainerPath):

  • 要么将该路径记录在文件中(以容器命名)
  • 或者,如果该文件已经存在,将:
    • 删除Mount.Source文件夹(为空)
    • 将文件中记录的路径移动到Mount.Source路径
    • 在该文件中记录Mount.Source路径

这样,我可以删除(显然docker rm,没有-v选项)容器并重新创建它,同时将数据放入该卷中。

您可以看到gitolite/run例如中使用的脚本。



 类似资料:
  • 并了解了如何制作仅数据容器:http://container42.com/2014/11/18/data-only-container-madness/ 我也看到了与我类似的问题:如何在docker中处理持久存储(例如数据库 但如果我有一个灯服务器设置..我用数据容器进行了一切很好的设置,而不是将它们“直接”链接到我的源操作系统,偶尔做一次备份… 总比有人过来重新启动我的服务器..我如何重新设置我

  • 我在我的项目中使用postgres docker映像。对于初始化,我使用以下命令来创建和初始化我的数据库(表、视图、数据…) 复制sql_dump.sql /docker-entrypoint-initdb.d 容器停止和删除后是否可以保留这些数据?例如,当我运行postgres的图像时,它将使用这些数据创建数据库,而每次容器启动时都没有加载脚本。只需加载第一次运行创建的数据。 我做了一些研究,发

  • 问题内容: 在最新版本的Docker(v1.10)之前,我们认为我们可以使用DOC: 仅数据容器 。因此,我将创建此类DOC(基于例如busybox)并将其链接到我的容器。您仍然可以在Docker文档中阅读有关此内容的信息。 对于新版本的docker,据说我们应该使用而不是DOC 。这是一个示例: 在这里,我们创建并使用了命名卷。 关于此新功能的文档仍然很少。我在问: 我们可以用命名容器替换DOC

  • 我找到的最接近的答案是这样的。 但我想知道的是,Dockerfile卷命令会被Kubernetes完全忽略吗?或者数据将被持久化到两个地方?一个用于docker卷(在主机中哪个豆荚运行),另一个是Kubernetes的PV? 之所以这样问,是因为我从docker hub部署了一些容器,其中包含VOLUME命令。同时,我也把PVC贴在我的豆荚上。我在考虑是否会在节点中创建本地卷(docker卷,而不

  • 本文向大家介绍Docker 仅数据容器,包括了Docker 仅数据容器的使用技巧和注意事项,需要的朋友参考一下 示例 仅数据容器已过时,现在被视为反模式! 在过去的日子里,在使用Docker的volume子命令之前以及在可以创建命名卷之前,当在任何容器中都不再有对它们的引用时,Docker删除了这些卷。仅数据容器已过时,因为Docker现在可以通过各种docker volume子命令创建命名卷以及