如何在移除仅数据容器后重新绑定docker卷



按照在容器中管理数据的官方指南中的示例,假设有一个通过

创建的纯数据容器
docker create -v /data --name data-container image /bin/true

还假设至少有一个正在运行的消费者容器,使用在仅数据容器中创建的卷:

docker run -d --volumes-from data-container --name consumer-container image

现在考虑在消费者仍在运行时使用-v开关删除数据容器:

docker rm -v data-container

我理解文档说这不会影响消费者-容器,因为卷实际上仍然可用:

"要从磁盘上删除卷,必须显式调用docker rm -v对卷有引用的最后一个容器。"

因此,这与unlink()系统调用相当。数据卷仍然可用,处于"pending"状态。使用"pending",我的意思是这个确切的体积不能再通过简单地使用--volumes-from绑定到其他容器。就unlink()的类比而言,不再有可以访问数据的名称。

我的问题是:是否有一种方法可以重新创建基于此挂起卷的仅数据容器,以便它可以通过--volumes-from再次包含?或者,这样的"待处理"容量是否受到谴责,因为一旦最后一个消费者停止使用,数据就会消失?

可以使用docker inspect --format="{{.Volumes}}" <Container ID>来确定卷在底层主机上的位置。

当消费者容器仍在运行时,您可以在主机上将卷的内容复制到另一个位置,并基于该新位置的内容创建一个新的数据容器。

缺点是,在复制结束和停止消费者容器(这会导致删除原始卷)之间的时间内,可能会向原始卷写入进一步的更改。

这是不理想的,但这是一种方式,我可以看到这可能是可能的。

最新更新