如何删除数据专用容器后重新绑定docker卷?

遵循容器pipe理数据官方指南中的示例,假设有一个通过创build的仅数据容器

docker create -v /data --name data-container image /bin/true 

另外,假设至less有一个正在运行的使用者容器,使用在数据专用容器中创build的卷:

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

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

 docker rm -v data-container 

我了解文档说,这不会影响消费者容器,因为卷实际上保持可用:

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

所以,这相当于unlink()系统调用。 数据量保持可用,处于“挂起”状态。 对于“等待中”,我的意思是这个确切的卷不能绑定到其他容器了,只需使用--volumes-from 。 就unlink()类比而言,没有可以访问数据的名称。

我的问题是:是否有一种方法来重新创build一个基于这个未决卷的数据专用容器,以便它可以通过--volumes-from再次被包含? 还是这样一个“悬而未决”的谴责,在这个意义上,一旦最后一个消费者停止的数据将会消失?

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

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

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

这不是那么理想,但是我可以看出这是可能的。