devicemapper存储,容器mount点的问题


问题:
使用devicemapper存储驱动时,docker在thin pool中为容器创建一个thin device
1. 这个device是mount到\var\lib/docker/devicemapper/mnt/containerid这个目录了吗?
2. 如果是:为什么在宿主机上这个目录下什么都看不到?无论容器是否启动
3. 如果不是,它mount到那儿去了呢?
4. QQ群里一位同仁说在centos6下可以看到容器的rootfs目录,而在centos7下看不到了。进一步docker大概使用了什么方法把这个mount点下的东西隐藏了么?
5. 在centos7下,容器停止后,自己使用dmsetup查看容器所在的device,是可以看到容器的rootfs目录的

测试环境:

docker version

Client version: 1.6.0
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): 8aae715/1.6.0
OS/Arch (client): linux/amd64
Server version: 1.6.0
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): 8aae715/1.6.0
OS/Arch (server): linux/amd64

Kernel Version: 3.10.0-229.el7.x86_64
Operating System: CentOS Linux 7 (Core)
已邀请:

徐新坤 - 京东商城-TIG-JDOS团队

赞同来自:


我就是在群里回答你问题的人。
首先从源码里看,可以看到挂载的MountDevice函数在这里:
https://github.com/docker/dock ... L1435
实际的挂载过程发生在这里的系统调用:
https://github.com/docker/dock ... L1477

只是这个挂载在centos6和7上会有不同效果而已。
6上的是可以直接通过mount来查看的。可以通过cat /proc/mounts查看。我给你举个例子:

<pre># cat /proc/mounts
rootfs / rootfs rw 0 0
...
/dev/mapper/docker-253:0-1966688-9da4e3d58c37068abc785ea960e679e72c1bb133d13aa8dc47cce024380a01fa /var/lib/docker/devicemapper/mnt/9da4e3d58c37068abc785ea960e679e72c1bb133d13aa8dc47cce024380a01fa ext4 rw,seclabel,relatime,barrier=1,stripe=16,data=ordered,discard 0 0</pre>
所以这就是我说的你可以去到对应的目录直接看。

但是在centos7上,mount的方式似乎更复杂些。我没深究。你有兴趣可以自己研究。

leisore

赞同来自:


先谢了。 由于GO语言还在刚刚了解中,所以直接看代码有点费力,再过一两周等对GO语言大致了解了,就去抠代码

徐新坤 - 京东商城-TIG-JDOS团队

赞同来自:


关于挂载不可见的问题,主要原因是docker daemon使用了一个单独的mount namespace。可以参考这里 https://www.cnblogs.com/xuxinkun/p/10643840.html

要回复问题请先登录注册