容器net namespace问题


1)/proc/${pid}/ns/下显示出${pid}进程使用了哪些namespace,我的docker是1.5,已经支持user namespace了,而且测试user隔离确实也生效了,但为什么这个目录下面只显示了ipc mnt net pid uts,而没有显示出user呢?莫非user namespace在kernel里通过那5个ns里的某个实现了?

2)user namespace是通过uid,gid映射实现的,但为什么/proc/${pid}/下面的uid_map和gid_map里的内容一直不变呢,不管我在container里怎么折腾user,物理机上container对应的/proc/${pid}/下的uid_map和gid_map的内容一直都是" 0 0 4294967295"
已邀请:

codesun - 懒得写

赞同来自: wonderflow wangzi19870227


1) 根据manual中proc(5)的描述,开启了user后,里面是会有user的,这个我刚才拿了段代码测试了一下,确实是有的,你可以参考这个网址中的代码在测试一下看看:测试代码
2) 0 0 xxxxx 表示ID_inside_ns ID_outside_ns length,后两个决定了你能够映射的uid的范围,所以你应该能理解为什么是不变的了吧?

ps. 目前的发行版对USER的支持都不是最完整的,因为有安全问题,当然如果你用root映射其他,我个人认为不会出什么问题,当然user最大的用处也不在此。。。上述代码我是用ubuntu14.04测试的,请问你用的是什么版本的发行版?你是如何测试user的?

william - cSphere CEO

赞同来自:


目前的docker不支持user namespace。未来会支持。困难有2个:
1、go语言问题
2、镜像的固定化和容器的动态化矛盾。uid/gid属于文件系统,固化到image里,但不同容器想映射到不同的uid range,势必需要chown -R,这在目前比较困难。

比较新的内核对uid/gid的映射是支持的。你可以在新版内核上研究lxc

要回复问题请先登录注册