Debian11运行Podman容器报错slirp4netns失败/dev/net/tun权限拒绝
Debian 11 无root权限运行Podman启动容器报错修复方案
问题根因
报错由两个独立故障叠加触发:
- slirp4netns 进程在普通用户命名空间内无
/dev/net/tun设备访问权限,虽然设备文件配置了全局读写权限,但部分虚拟化平台的用户命名空间设备映射规则默认拦截非root用户对tun字符设备的访问 - 当前运行的4.19版本内核对fuse-overlayfs的部分新特性支持不全,叠加本地存储缓存损坏,触发overlay挂载路径
invalid argument错误
修复步骤
按顺序执行以下操作:
- 第一步:清理损坏的本地存储缓存
执行命令清理残留的错误容器、镜像和挂载缓存:podman system reset注意:该操作会删除当前用户下所有本地存储的容器、镜像、卷数据,如有重要内容提前备份。
- 第二步:调整fuse-overlayfs挂载配置适配低版本内核
编辑当前用户的Podman存储配置文件~/.config/containers/storage.conf,文件不存在则手动创建,写入以下配置:[storage] driver = "overlay" runroot = "/run/user/%U/containers" graphroot = "/home/%U/.local/share/containers/storage" [storage.options.overlay] mount_program = "/usr/bin/fuse-overlayfs" native_diff = "false" metacopy = "false" - 第三步:修复普通用户环境下tun设备权限
永久修复方案:配置udev规则给普通用户开放tun设备的用户命名空间访问权限- 创建规则文件
/etc/udev/rules.d/99-tun-rootless.rules,写入以下内容:KERNEL=="tun", MODE="0666", TAG+="uaccess" - 重新加载规则使其生效:
sudo udevadm control --reload-rules sudo udevadm trigger - 开启用户会话常驻,避免用户退出后Podman进程权限丢失:
sudo loginctl enable-linger dennis
podman run --net=host hello-world - 创建规则文件
- 第四步:验证修复结果
重新执行基础测试命令:
正常输出hello-world欢迎文本即修复完成。podman run hello-world
补充说明
日志里的WARNING: Support for seccomp is experimental是slirp4netns 1.1.8版本的已知提示,不影响容器正常运行,不需要额外处理;如果需要消除警告,可以从Debian 11 backports源升级slirp4netns到1.2及以上版本。
内容的提问来源于stack exchange,提问作者dennis605
相关产品推荐
相关产品推荐

