You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

启动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

火山引擎 最新活动