2月 042017
 

理论上来讲,mount操作一定是发生在容器启动之后的(包括宿主机也如此);但是,docker只是在create好run的时候提供了挂载卷的方法,一旦容器被创建,我们将再没有机会给容器挂载新的卷了;如果非要这么做的话,只能销毁、重新创建容器,好生繁琐。

既然理论上可以在容器启动之后挂载新的卷,docker没有提供相应的API,那么又该如何做呢?

  1. 办法一: hack一下docker,提供这方面的功能; 缺点: 随着docker版本的升级,代码维护起来比较麻烦
  2. 办法二: 从系统层面来实现,参考: https://jpetazzo.github.io/2015/01/13/docker-mount-dynamic-volumes/

办法二还是比较科学的,这里测试了一下,确实好用,脚本如下:

 

docker-enter 下载地址: https://github.com/jpetazzo/nsenter

注意:

  1. 这里用到了一个importenv的程序,可以参考容器环境变量来设置执行命令的环境变量,是个不错的办法,只是引入了一个其他的程序
  2. 这个要求容器中安装mount命令,该命令的依赖比较多,而且很少使用,所以,容器中一般都没有,需要手动安装,如果去掉那些依赖,单独安装一个mount命令会好一些
  3. 这个方法不适用于不基于块设备的文件系统,只有在/proc/mounts能正确得到块设备节点(上面谈到,并不总是能正确得到)的时候才能起作用。(比如: cephfs挂在的目录就不行)
 Posted by at 下午 4:52

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

(required)

(required)

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据