一 数据卷容器问题一:启动状态和级联
先停掉data1容器,然后再用data1做数据卷容器来挂载到data3
![](https://i-blog.csdnimg.cn/blog_migrate/33c664d872873431d96615e38ddd817a.png)
可以看出,data也被成功挂载到了data3里,上面的操作至少可以说明两点:
使用–volumes-from参数所挂载数据卷的容器自己并不需要保持在运行状态。
已经挂载了数据卷的容器可以级联挂载数据卷。
二 数据卷容器问题二:同时挂载数据卷容器
下面在讨论一种情况,现在在创建一个容器,挂载目录为data4。
docker run -i -t -v /data4 --name data4 docker/whalesay
如果我用两个–volumes-from来分别指定data和data4作为数据卷容器。
docker run -i -t --volumes-from data --volumes-from data4 --name data5 docker/whalesay
![](https://i-blog.csdnimg.cn/blog_migrate/8d9d2f0777cc317192f080b515e030b7.png)
可以看出,新创建的data5中存在data和data4中挂载的目录。
这说明:可以使用超过一个的–volumes-from参数来指定从多个容器挂载不同的数据卷。
三 数据卷容器问题三:被挂载的数据卷容器同名问题
可是,如果我们这样创建容器
docker run -i -t --volumes-from data --volumes-from data1 --name data6 docker/whalesay
![](https://i-blog.csdnimg.cn/blog_migrate/eecc75c9030751d8b52c9d4483e51eb3.png)
可以发现,只有一个data目录,这说明虽然指定了不同的容器卷,可是最终指向的是同一个,如果进入data1中,创建一个data1.txt的文件.在data2容器中也是可以看到的。
上面的情况是通过多个–volumes-from来挂载有级联关系的容器,最终新建的容器只有一个目录。
如果挂载没有级联关系的两个容器,可是被挂载的两个容器的挂载目录重名,会是什么情况?
先新建一个名为data7挂载目录为data的容器
sudo docker run -i -t -v /data --name data7 docker/whalesay
然后在data下新建一个data7.txt。
这是,容器data和data7是分别挂载了data目录的不同两个容器。
现在再新建一个容器data8,并把data和data7作为它的数据卷容器
docker run -i -t --volumes-from data --volumes-from data7 --name data8 docker/whalesay
可是发现只有一个data目录,并且里面只有data7.txt一个文件。
然后,我创建容器data9。
sudo docker run -i -t --volumes-from data7 --volumes-from data --name data9 docker/whalesay
发现也是只有一个data目录,可是内容确是容器data的内容,在里面新建一个data9.txt,在容器data里也是可以看到的。
由此可以得知,如果使用–volumes-from挂载多个数据卷容器时,如果对应的容器挂载的目录是相同的,那么只有最后一个–volumes-from指定的数据卷容器会挂载成功。
整个过程实践结果如下。
![](https://i-blog.csdnimg.cn/blog_migrate/a3f74b75e2699eb4295b860bd489fc20.png)
四 数据卷容器的删除
容器使用完成后,为了节约资源难免会被删除,那么数据卷容器删除后,所创建的文件是否还在?
先data9中创建了一个文件data9.txt,同时data9又挂载容器data(没有挂data7),现在删除容器data9。
docker rm data9
在容器data中可以发现,在容器data9中创建的文件data9.txt仍然是存在的。
整个实践过程如下:
![](https://i-blog.csdnimg.cn/blog_migrate/275bdf5e71069442aba82aaeced45fdf.png)
说明数据卷容器也是Docker容器数据持久化的一种方式,正是这个特性,可以让用户方便的在容器之间升级和移动数据卷。