目的:将系统用户映射到docker容器里,使其不再使用root权限
一、修改daemon.json
添加userns-remap,如果你想指定特定用户可以把default修改为系统用户,如果为default就代表用户分配的权利交给default自动完成。
{
"userns-remap": "default"
}
二、刷新配置
systemctl daemon-reload && systemctl restart docker
三、验证生效
此时系统会自动创建dockremap这个用户,uid:100000,gid:65536
[root@VM-0-15-centos ~]# cat /etc/subuid
dockremap:100000:65536
[root@VM-0-15-centos ~]# cat /etc/subgid
dockremap:100000:65536
四、修改内核参数max_user_namespaces
默认这个参数的值为0,是不允许用用户名称空间的,现在我们给他开启起来,具体的值需要根据上面查到的uid而定
sysctl -w user.max_user_namespaces=uid
五、可能遇到的问题
在RHEL 7.5版本,上面第二步在dockerd启动的时候会报错"Can't create ID mappings: %!v(MISSING): No subuid ranges found for user "dockremap"",查询之后判断应该是系统BUG,可以看看Redhat官网的Bug说明Bug-1546870,它会在系统中建立dockremap账号然后使用usermod -v参数来设置dockermap用户的ID范围,但是在Centos 7.5版本的usermod命里没有-v参数。这就意味着RHEL 7.5不支持动态添加subid。所以我们只能手动来做,不过据说其他发行版可以支持比如Ubantu或者Fedora。
使用下面命令手动设置
# uid根据情况而定
echo "dockremap:100000:65536" > /etc/subuid
echo "dockremap:100000:65536" > /etc/subgid
设置好之后再从第二步开始执行即可