Ubuntu容器内启动Docker遇/sys/fs/cgroup挂载权限拒绝问题求助
解决Docker容器内启动Docker的cgroup权限问题
核心原因
在Docker容器内部运行Docker(即DinD)时,默认的cgroup资源访问权限不足,即便使用了--privileged参数,容器仍无法正常挂载宿主机的cgroup子系统,导致启动时出现权限拒绝错误。同时,容器内独立的Docker环境会将镜像、容器数据存储在容器内部,极易引发存储空间暴涨的问题。
解决方案1:重新创建容器并挂载cgroup
替换原容器创建命令,添加cgroup只读挂载参数,让容器直接使用宿主机的cgroup资源:
docker run -it --privileged -u root --name ubuntu-vm \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ ubuntu /bin/bash
进入容器后重新安装Docker并启动,即可解决cgroup权限拒绝问题。
解决方案2:挂载宿主机Docker Socket(更适合资源评估场景)
如果你的需求只是通过容器化Ubuntu评估服务器资源,无需在容器内运行独立的Docker环境,推荐直接挂载宿主机的Docker Socket,这样容器内可直接调用宿主机的Docker服务,避免安装和权限问题,还能防止容器体积暴涨:
docker run -it --privileged -u root --name ubuntu-vm \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/usr/bin/docker \ ubuntu /bin/bash
这种方式下,容器内执行的docker、docker compose命令实际都是通过宿主机的Docker服务运行,所有镜像和容器数据都存储在宿主机,不会占用容器的存储空间,资源评估结果也更准确。
临时修复(不推荐)
如果不想重新创建容器,可在容器内手动挂载cgroup子系统,但重启容器后会失效:
# 先挂载tmpfs到cgroup根目录 mount -t tmpfs tmpfs /sys/fs/cgroup # 创建需要的cgroup子目录并挂载对应子系统 mkdir -p /sys/fs/cgroup/cpu /sys/fs/cgroup/memory /sys/fs/cgroup/blkio mount -t cgroup cgroup -o cpu /sys/fs/cgroup/cpu mount -t cgroup cgroup -o memory /sys/fs/cgroup/memory # 其他cgroup子系统可按需挂载,或直接挂载所有:mount -t cgroup cgroup /sys/fs/cgroup
内容的提问来源于stack exchange,提问作者tabool
相关产品推荐
相关产品推荐

