Lucent's Blog

当时明月在,曾照彩云归。



代码在写我

Bug在De我

螃蟹在剥我的壳

漫天的我落在雪花上

而你在想我...

6ams5piO5pyI

Docker 用户映射

目的:将系统用户映射到docker容器里,使其不再使用root权限

一、修改daemon.json

添加userns-remap,如果你想指定特定用户可以把default修改为系统用户,如果为default就代表用户分配的权利交给default自动完成。

{
    "userns-remap": "default"
}

二、刷新配置

systemctl daemon-reload && systemctl restart docker

三、验证生效

此时系统会自动创建dockremap这个用户,uid:100000,gid:65536

[[email protected] ~]# cat /etc/subuid
 dockremap:100000:65536
[[email protected] ~]# 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

设置好之后再从第二步开始执行即可

下一篇

在Nacos中让服务使用指定网段ip注册

在nacos服务注册时,发现注册的服务全是容器虚拟IP,并不是可以通讯的内网IP。…

阅读