Docker 如何恢复已删除容器的数据卷?

5

目前我正在尝试理解有关数据持久性的一些场景。

数据卷容器模式听起来很棒,并且有办法备份附加的卷。但是如果我没有当前备份,DataVolumeContainer被删除(而不仅仅是停止),该怎么办?

据我所知,该卷在物理上仍然存在于我的主机系统上,但我无法将其附加到新容器上(因为没有引用容器)。

是否有可能通过引用其卷文件或卷名称来恢复该卷(例如将其挂载到新容器上)? (假设我已经为该卷命名)

2个回答

4
但是我无法将它附加到新的容器上(因为没有引用容器了)。 是否有可能通过引用其卷文件或卷名称(假设我命名了该卷)来恢复该卷(例如将其挂载到新容器中)?
是的,如果您可以找到旧卷路径,您可以按照我在“Docker mount dangling volume”中提到的方式,在一个(且为空)数据卷容器中恢复其内容,方法是使用旧路径中找到的内容替换其挂载路径内容。
我更喜欢在创建新的数据卷容器时保存该路径

谢谢!所以基本上当我知道要将哪个卷附加到新容器时,我可以简单地使用卷的路径(在主机系统上)作为“-v <host-dir>:<container-dir>”中的主机目录? 太棒了!非常感谢!! :) - Ciprian
@Ciprian 我不是在谈论容量,而是数据卷容器,它们将存储在 /var/lib/docker/volumes/xxx 中的数据。 - VonC
是的,但您通过修改其挂载路径将旧数据卷容器的容量附加到新容器上,对吗? - Ciprian
@Ciprian 我保留了新的挂载路径,但将旧的内容放入其中(实际上,我删除了新的挂载路径,并使用新的挂载路径重命名了旧的路径:https://github.com/VonC/b2d/blob/65126dcaf418d8cd2c76d969cf5912ec1b671cdd/updateDataContainerPath#L36-L38) - VonC
@Ciprian 我的意思是检索旧容器中的内容,并将其放入新数据卷容器中(我指的是存储在 /var/lib/docker/volumes 中的内容)。 - VonC
显示剩余2条评论

1

从您的文本中不清楚您是否已经移除了包含卷-如果是,则已经丢失-否则,默认情况下,您可以在此处找到“原始”Docker卷:/var/lib/docker/volumes/。请查看docker rm -v的文档。

通常,您会通过docker run ... -v hostpath:containerpath ...创建一个卷,然后无论您是否删除容器,您的数据始终可用于hostpath


谢谢您的回答!:) 但是我的问题特别针对处理大量数据时的数据持久性。我假设使用'rm'命令时没有使用'-v'标志,应该澄清一下,抱歉! - Ciprian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接