运行环境:
os: CentOS Linux release 7.6.1810 (Core)
docker: 19.03.4
错误提示
1 | [root@localhost ~]# docker run -it --rm centos:8 /bin/bash --login |
原因
redhat7.4版本的release notes中说明7.4版本已经支持了user namespace特性,但是 user.max_user_namespace
的默认值是0。如果要使用user namespace功能需要修改该默认值。
同时7.4版本中将非特权用户的user namespace功能设置为了技术预览。可以通过配置内核启动参数 namespace.unpriv_enable=1
来打开该功能。设置了该功能后,非特权用户通过传递CLONE_NEWNS
选项来调用 clone()
时不再返回错误而是允许该操作。
However, to enable the unprivileged access to name spaces, the CAP_SYS_ADMIN flag has to be set in some user name space to create a mount name space
解决方法
设置max_user_namespace
1 | 方法一 |
方法一和方法二重启后配置会丢失
设置namespace.unpriv_enable
1 | 打开namespace.unpriv_enable |
执行该命令前 /boot/grub2/grub.cfg
部分内容如下
1 | menuentry 'CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-76bc0bdb-c41f-47f8-aae1-72561c04faa5' { |
执行该命令后
1 | menuentry 'CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-76bc0bdb-c41f-47f8-aae1-72561c04faa5' { |
1 | 关闭namespace.unpriv_enable |