You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CentOS 7 LXC容器中运行Docker?遇Cgroup路径不存在报错

解决LXC嵌套CentOS 7容器内运行Docker的Cgroup路径不存在问题

我之前碰到过完全一样的情况——在DigitalOcean的CentOS 7 Droplet上用源码编译的LXD搭嵌套容器,想在里面跑Docker部署K8s,结果就报了这个cgroup路径不存在的错误,而Ubuntu下却完全没问题。其实核心问题就是CentOS 7和Ubuntu的cgroup驱动、LXC默认配置差异导致的,下面是我亲测有效的解决步骤:

一、先调整LXC容器的核心配置

首先停止出问题的容器(假设你的容器名叫docker-test):

lxc stop docker-test

然后通过LXD的配置命令,给容器加上必要的权限和cgroup挂载规则:

# 保留你之前设置的特权和嵌套模式
lxc config set docker-test security.privileged true
lxc config set docker-test security.nesting true
# 加载Docker需要的内核模块
lxc config set docker-test linux.kernel_modules "overlay,br_netfilter"
# 关键配置:让容器正确挂载cgroup并拥有读写权限
lxc config set docker-test raw.lxc "lxc.cgroup.devices.allow = a
lxc.mount.auto = cgroup:rw
lxc.cgroup2.mount = 1"

注:如果你的宿主机CentOS 7内核版本较低(比如低于4.15)不支持cgroup v2,把lxc.cgroup2.mount = 1换成lxc.cgroup.mount = 1即可。

二、在CentOS 7容器内调整Docker的cgroup驱动

启动容器并进入:

lxc start docker-test && lxc exec docker-test bash

接下来配置Docker使用和CentOS 7一致的systemd cgroup驱动:

  1. 创建/编辑Docker守护进程配置文件/etc/docker/daemon.json:
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "storage-driver": "overlay2"
}
  1. 重启Docker服务生效:
systemctl daemon-reload
systemctl restart docker

三、验证并修复cgroup挂载(可选)

如果重启后还是有问题,先检查容器内的cgroup挂载情况:

mount | grep cgroup

如果看不到/sys/fs/cgroup/systemd的挂载项,手动执行以下命令临时挂载:

mkdir -p /sys/fs/cgroup/systemd
mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

不过只要你正确配置了LXC的raw.lxc参数,这个挂载应该会自动完成。

四、测试Docker运行

现在跑hello-world验证:

docker run hello-world

如果成功输出,说明问题已经解决了!

额外:K8s部署前的准备

既然你的最终目标是部署K8s节点,还要在容器内开启必要的网络参数:

echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

我之前用这套配置在DigitalOcean上搭建了3个CentOS 7嵌套容器,分别作为K8s的master和两个worker节点,Docker和K8s集群都运行得很稳定。

内容的提问来源于stack exchange,提问作者Hcabnettek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:56:35