
gVisor 报 SELinux is not supported 错误怎么解决【免费下载链接】gvisorApplication Kernel for Containers项目地址: https://gitcode.com/GitHub_Trending/gv/gvisor在用 gVisor 运行容器时如果宿主机开启了 SELinux创建容器可能会直接失败报错形如SELinux is not supported: system_u:system_r:container_t:s0:...原因是 gVisor 不支持为容器设置 SELinux 标签SELinux 启用时容器运行时会在容器配置container spec中带上 SELinux label而runsc一旦检测到SelinuxLabel非空就会拒绝启动并抛出这个错误可以在 runsc/specutils/specutils.go 中看到对应的判断逻辑。解决方案不需要关闭整个系统的 SELinux只需要在创建容器时为这一个容器单独禁用 SELinux 即可。先确认 SELinux 是否已启用根据 gVisor FAQ这个错误发生在 SELinux 已启用的系统上。用sestatus命令确认当前状态sudo sestatus文档给出的示例输出文档示例$ sudo sestatus SELinux status: enabled [...]如果SELinux status显示enabled就可以按下面的步骤处理如果显示disabled则这个报错另有原因不应套用本文方案。主路径Docker 创建容器时禁用 SELinux 标签FAQ 给出的修复方式是由于 gVisor 不支持设置 SELinux 标签可以在创建容器时传入--security-opt labeldisable参数仅为该容器禁用 SELinux系统级的 SELinux 保持不变。结合 Docker Quick Start 中的运行方式命令如下docker run --runtimerunsc --rm --security-opt labeldisable hello-world说明--runtimerunsc指定使用 gVisor 运行时前提是已按 Docker Quick Start 完成sudo runsc install并重启过 Docker daemon--security-opt labeldisable就是本问题的关键参数作用域只有这一个容器hello-world只是 Quick Start 中的示例镜像换成你自己的镜像即可其余参数保持不变。如果这个参数缺失而宿主机 SELinux 处于启用状态容器创建就会因携带 SELinux label 而报出标题中的错误。可选分支CRI-O 环境下改用配置项如果容器是通过 CRI-O而非 Docker驱动的--security-opt不适用需要在 CRI-O 配置中关闭 SELinux。CRI-O Quick Start 要求在/etc/crio/crio.conf.d/99-gvisor.conf中设置[crio.runtime] selinux false该文档的解释是gVisor 自己管理隔离不支持为其容器打 SELinux 标签保持 SELinux 启用会导致容器创建失败因此selinux false是运行 gVisor 时的必需项。修改后需要sudo systemctl restart crio重启 CRI-O。注意文档同时声明CRI-O 不是 gVisor 官方支持的方式也不在 gVisor 集成测试覆盖范围内该配置属于尽力而为best-effort生产环境建议优先使用 containerd。验证结果重新执行创建容器的命令如上面的docker run容器能正常启动即说明问题解决。Docker 场景下还可以按 Quick Start 的方法确认容器确实跑在 gVisor 里docker run --runtimerunsc --rm -it ubuntu dmesg输出中出现Starting gVisor...等字样文档示例即说明运行时是 gVisor。注意区分另一个相似的 SELinux 错误FAQ 中还有另一条 SELinux 相关错误现象不同不要混用上面的方案error remounting chroot in read-only: permission denied这个错误发生在 gVisor运行在容器内部、且宿主系统 SELinux 处于 enforcing 模式的场景需要通过journalctl等查看审计日志中的AVC avc: denied { mounton } ... permissive0记录来确认。它的解决方式是给外层容器打container_engine_t标签即创建外层容器时传入--security-opt labeltype:container_engine_t该标签专门用于在容器内运行容器引擎例如在 Docker 或 Podman 中运行 gVisor。这个场景不适用--security-opt labeldisable两者针对的是不同的报错与不同的容器层级处理前先用报错文本确认自己属于哪一种。【免费下载链接】gvisorApplication Kernel for Containers项目地址: https://gitcode.com/GitHub_Trending/gv/gvisor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考