启动LXC容器时cgroup创建权限被拒,执行指定步骤后仍报错怎么修复?
解决LXC启动时cgroup权限拒绝问题
你遇到的是LXC容器启动时无法创建/管理cgroup目录的权限问题,这通常是因为用户的cgroup权限未正确配置,或者cgmanager与系统的cgroup管理机制(比如systemd)存在冲突。下面是几种可行的修复方案:
方案一:重新配置用户cgroup并确保会话生效
之前的操作可能因为进程PID关联不正确导致权限未真正生效,按以下步骤重新操作:
- 先停止并重启cgmanager服务,确保服务状态正常:
sudo service cgmanager stop sudo service cgmanager start - 为你的用户创建全层级的cgroup条目:
sudo cgm create all $USER - 递归修改该cgroup条目的所有权,确保你的用户拥有完全权限:
sudo cgm chown all $USER $(id -u $USER) $(id -g $USER) - 将当前shell进程加入到这个cgroup中(
$$代表当前shell的PID,比$PPID更准确):cgm movepid all $USER $$ - 关键步骤:退出当前终端会话,重新打开一个新终端,确保用户进程完全继承cgroup权限,然后再尝试启动容器:
lxc-start -n hola -P /home/edem/.local/share/lxc/ --logfile asdf --logpriority DEBUG
方案二:切换LXC使用systemd cgroup驱动(适用于systemd系统)
如果你的系统使用systemd管理cgroup,cgmanager可能会和它产生冲突,修改LXC配置切换到systemd驱动:
- 编辑LXC全局默认配置文件:
sudo nano /etc/lxc/default.conf - 添加或修改以下配置项:
lxc.cgroup.use = systemd lxc.apparmor.profile = generated lxc.apparmor.allow_nesting = 1 - 保存文件后重启LXC服务:
sudo service lxc restart - 再次尝试启动容器。
方案三:临时应急(不推荐长期使用)
如果上面的方案都无法快速生效,可以临时给用户添加sudo权限来绕过cgroup限制:
- 执行
sudo visudo编辑sudoers文件,添加以下内容:edem ALL=(ALL) NOPASSWD: /usr/bin/cgm, /usr/bin/lxc-start - 保存后,使用
sudo lxc-start ...命令启动容器,这只是临时解决方式,长期使用还是建议用前两种方案修复权限问题。
内容的提问来源于stack exchange,提问作者edem




