Ubuntu本地环境Spring Boot测试容器启动失败求助
解决Ubuntu 22.10下Spring Boot测试Docker容器启动失败(cgroups mountpoint不存在)问题
问题原因
Ubuntu 22.10默认启用cgroup v2,而Docker或你使用的容器测试库(比如Testcontainers)可能未适配好cgroup v2的配置,导致底层抛出cgroups: cgroup mountpoint does not exist: unknown错误,进而触发Spring Boot的ContainerLaunchException。
具体修复步骤
1. 调整Docker的cgroup驱动
编辑Docker配置文件/etc/docker/daemon.json(文件不存在则直接新建):
{ "exec-opts": ["native.cgroupdriver=systemd"] }
执行命令重启Docker服务:
sudo systemctl daemon-reload sudo systemctl restart docker
2. 切换到cgroup v1(若第一种方法无效)
修改GRUB启动参数强制使用cgroup v1:
- 打开
/etc/default/grub文件,找到GRUB_CMDLINE_LINUX_DEFAULT行,修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0"
- 更新GRUB配置:
sudo update-grub
- 重启电脑使配置生效。
3. 检查Testcontainers配置(若依赖该库)
如果你的测试基于Testcontainers,可尝试显式指定Docker客户端,确保它能正确识别Docker环境:
@Container public static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:14-alpine") .withDockerClient(DockerClientFactory.instance().client());
4. 验证cgroup挂载状态
执行以下命令查看cgroup挂载情况:
mount | grep cgroup
若为cgroup v2,会显示cgroup2 on /sys/fs/cgroup type cgroup2;若为v1,则会出现多个细分的cgroup目录,确认Docker能访问对应挂载点即可。
验证修复效果
重启Docker后重新运行Spring Boot测试,检查是否还出现ContainerLaunchException。若问题依旧,可查看Docker日志获取更多排查线索:
journalctl -u docker.service
内容的提问来源于stack exchange,提问作者mr nooby noob
相关产品推荐
相关产品推荐

