环境
# Linux 版本
uname -a
Linux mingy-ecs 5.15.0-83-generic #92-Ubuntu SMP Mon Aug 14 09:30:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
# Docker 版本
Version: 24.0.7
# Cgroup 版本
Cgroup Version: 2
# 问题
docker容器无法启动,报错
WARNING: the "devices" cgroup should be in its own hierarchy.
WARNING: it looks like the "devices" cgroup is not mounted.
......
Error starting daemon: Devices cgroup isn't mounted
Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted · Issue #4072 · lxc/lxc
# 原因
Linux 5.x
及以上内核改用了 cgroup v2
版本,而容器镜像环境需要的还是 cgroup v1
版本。
同时由于 cgroup v2
和 v1
不能兼容,因此导致容器启动后,容器内相关服务无法正常启动。
Linux 4.x
内核版本才用的 cgroup v1
版本,可正常使用,无影响。
# 解决
既然 docker
容器只支持 cgroup v1
版本,那么我们可以把宿主机(host)的 cgroup
版本改成 v1
即可
编辑修改配置文件 /etc/default/grup
# 注释掉之前的 GRUB_CMDLINE_LINUX 内容
sed -i '/GRUB_CMDLINE_LINUX=/s/^/# /' /etc/default/grub
# 插入新的 GRUB_CMDLINE_LINUX 内容
sed -i '/GRUB_CMDLINE_LINUX=/a\GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=0 systemd.unified_cgroup_hierarchy=0"' /etc/default/grub
# 更新 grub 配置
update-grub
# 重启系统
reboot
成功修改 Cgroup Version
为 v1
版本
成功解决问题