unshare是干嘛的?
简单说就是用来运行程序的,它允许程序不共享主进程的一些namespace,而namespace主要用来隔离进程的,当前大火的容器技术就是使用了namespace。
运行下面的命令
unshare --user --pid --map-root-user --mount-proc --fork bash
这就类似于你运行了一个容器了,docker exec -it <image> /bin/bash
不出问题的话,你应该就进入一个单独的执行环境了,user,pid这些都是独立于主进程的
好巧不巧,偏偏它出问题了:
unshare: unshare 失败: 无效的参数
怎么搞?
1、首先看你的内核是否支持这些namespace,使用命令ls -l /proc/$$/ns
2、max_user_namespaces文件记录了允许创建的user namespace数量,有的系统默认是0,盘它
echo 2147483647 > /proc/sys/user/max_user_namespaces