远程Podman服务拉取镜像正常但运行容器报错故障排查
问题根因
该故障是嵌套容器场景下的cgroup权限配置错误导致:
你将Podman服务运行在Docker容器中对外提供远程访问,虽然启动时加了--privileged特权参数,但默认配置下Docker没有将cgroup控制器的完整操作权限下放给内层Podman容器。镜像拉取、镜像列表查询类操作不涉及容器运行时资源隔离配置,不需要操作cgroup文件系统,因此可正常执行;启动容器时,OCI运行时crun需要在cgroup目录下创建子分组、写入容器进程ID,会触发cgroup v2权限拦截,最终抛出Operation not supported、device or resource busy的报错。
修复方案
调整外层Podman服务容器的启动参数,正确透传cgroup权限即可,替换原启动命令为:
docker run --privileged -p 8888:8888 \ -v /sys/fs/cgroup:/sys/fs/cgroup:rw \ --cgroupns=host \ quay.io/podman/stable:latest \ podman system service --time=0 tcp://0.0.0.0:8888
新增参数作用:
-v /sys/fs/cgroup:/sys/fs/cgroup:rw:将宿主机cgroup目录以读写模式挂载进服务容器,避免内层Podman访问到只读或被隔离代理的cgroup文件系统--cgroupns=host:让Podman服务容器直接使用宿主机的cgroup命名空间,跳过嵌套cgroup命名空间带来的操作限制
重启服务后重新执行容器启动命令即可恢复正常,客户端侧原有连接配置不需要修改。
内容的提问来源于stack exchange,提问作者Richard Nemeth
相关产品推荐
相关产品推荐

