RHEL8下非Root用户运行ubi8-init容器Podman+systemd异常求助
解决方案:RHEL8非Root用户Podman运行ubi8-init容器的cgroup权限问题
我之前在RHEL8 + cgroup v2的环境下折腾过类似的Podman权限问题,结合官方文档和实际踩坑经验,给你几个可行的解决方向:
1. 用systemd委托权限替代临时chown
你之前手动chowncgroup路径只是临时 workaround,cgroup v2下正确的做法是让systemd把用户会话的cgroup权限委托给普通用户:
- 创建(或编辑)
/etc/systemd/system/user@.service.d/delegate.conf文件,写入以下内容:[Service] # 包含freezer权限来解决podman cp的冻结问题 Delegate=cpu cpuset io memory pids freezer - 重新加载systemd配置并终止当前用户会话(需要重新登录):
sudo systemctl daemon-reload sudo loginctl terminate-user bob
重新登录bob用户后,systemd会自动处理用户会话的cgroup权限,不需要再手动修改/sys/fs/cgroup下的文件权限。
2. 配置Podman优先使用systemd作为cgroup管理器
cgroup v2下systemd的兼容性比cgroupfs好得多,修改用户级Podman配置:
- 编辑
~/.config/containers/containers.conf(如果没有就创建),添加或修改:[engine] cgroup_manager = "systemd" events_logger = "journald" - 执行
podman system migrate让配置生效
3. 验证subuid/subguid配置
虽然你已经配置了subuid/subguid,但还是确认一下:
cat /etc/subuid | grep bob cat /etc/subgid | grep bob
确保输出都是bob:100000:65536,如果没问题,podman system migrate也会重新加载这些映射。
4. 测试验证
完成以上配置后,重新登录bob用户,执行启动命令:
podman run --name=ubi-init-test --cgroup-manager=systemd -it --rm --systemd=true ubi8-init
启动成功后,再尝试podman cp命令,比如:
echo "test content" > test.txt podman cp test.txt ubi-init-test:/tmp/
应该不会再出现cgroup.freeze的权限错误了。
额外建议
Podman 2.0.5是比较旧的版本,RHEL8的后续更新中修复了不少cgroup v2相关的bug,如果你有条件,可以执行sudo yum update podman升级到官方支持的最新版本,能避免一些潜在问题。
内容的提问来源于stack exchange,提问作者CozyBob
相关产品推荐
相关产品推荐

