如何删除数据专用容器后重新绑定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一个新的数据容器。
缺点是可能会在复制结束和停止消费者容器之间的时间内(这会导致删除原始卷)在原始卷上写入进一步的更改。
这不是那么理想,但是我可以看出这是可能的。