gVisor原生支持systemd:沙箱里跑完整Linux系统,VM还有必要吗?

原创
alex 19分钟前 阅读数 2 #头条

gVisor原生支持systemd:沙箱里跑完整Linux系统,VM还有必要吗?

背景与新增内核API:从单服务沙箱到全系统容器

我最早跑容器的时候,总觉得少点什么。容器里只有一个服务在跑,PID 1 就是那个服务本身。日志没人统一管,没有开机自启,进程崩了也没人帮忙拉起来。对效率来说这挺好,省资源、启动快,但离"一个完整的 Linux 系统"差得远。gVisor 作为 OCI 运行时,传统上就是用来沙箱化这种单服务的应用容器,容器里几乎没有用户空间在运行,除了服务本身 来源:HH。

2026 年 9 月 17 日,gVisor 官方博客宣布支持 systemd,作者是 Ryan El Kochta 和 Shailend Chand 来源:HH。为了这一步,gVisor 新增了好几个内核 API:新的 mount API、Cgroups v2、Pidfds、POSIX ACL 支持(tmpfs 和 overlayfs)、openat2(2) 系统调用,再加上一堆小功能和 bug 修复 来源:HH。这些不是随便挑的,systemd 对内核接口的要求很细,缺一个就没法在沙箱里正常当 PID 1。

官方声明 systemd 已经在 Ubuntu、Debian 和 Red Hat 的 Universal Base Images 中测试通过 来源:HH。三个主流发行版都过了,说明这个支持不是针对某一个发行版的特判。如果你用其他发行版,大概率也不会差太远。

动手实践:构建并运行systemd全系统容器

具体怎么跑?官方给的路径很直接。先在 /etc/docker/daemon.json 里给 runsc 运行时加两个参数,--in-sandbox-cgroup=v2 和 --allow-suid 来源:HH。然后克隆 gVisor 仓库,构建镜像:docker build -t systemd-ubuntu images/systemd-user/systemd-ubuntu 来源:HH。这个镜像在 gVisor 仓库的 images/systemd-user/systemd-ubuntu 路径下,配置为用 systemd 引导启动 来源:HH。

运行命令是 docker run --runtime=runsc --tmpfs /run --tmpfs /home:exec --privileged -d --name dev --hostname dev -p 127.0.0.1:2222:22 systemd-ubuntu 来源:HH。--privileged 值得多说一句。官方特别提示,当与 gVisor 一起使用时,--privileged 不会给沙箱里的应用任何额外宿主权限,gVisor 只是模拟了那些被沙箱应用观察到的额外权限,比如 capabilities 来源:HH。也就是说,这个 flag 的作用被沙箱边界截住了,不会漏到宿主上。

进容器里验证,uname -r 返回 4.19.0-gvisor,/etc/os-release 显示 Ubuntu 26.04 LTS(Resolute Raccoon)来源:HH。systemctl status 显示 State: running,180 个 unit 已加载 来源:HH。systemd 在沙箱里真的转起来了。

新用例与反直觉发现:沙箱内运行类似VM的工作负载

支持 systemd 之后,官方说这"opens up some interesting new use cases" 来源:HH。最直接的用例是沙箱化的开发者工作站。你可以有一个完整的 Ubuntu 系统,systemd 管着服务,还能通过 SSH 访问 来源:HH。标题里说的"完整 Linux 桌面应用"也在这个方向上 来源:HH。以前想跑桌面应用,得开个虚拟机;现在沙箱里就能做。

这个变化有点反直觉。gVisor 一直被认为适合微容器:单服务、无用户空间,主打轻量和可扩展 来源:HH。现在它能在沙箱里启动完整的 systemd 系统,挑战了那种"gVisor 只适合微容器"的固有认知 来源:HH。同一个运行时,两头都占了。

我的判断是,gVisor 与 systemd 的结合,让容器在功能上逼近虚拟机,但保持了 OCI 容器的轻量性 来源:HH。不需要为每个隔离环境起一个 VM 内核,就能获得接近 VM 的完整系统体验。这是它最大的价值。

多源交叉验证:Ubuntu、Debian、Red Hat UBI三平台支持对比

我手头就这一篇官方材料,HN 上还没人讨论。官方声明 systemd 在 Ubuntu、Debian 和 Red Hat Universal Base Images 中均已测试通过 来源:HH。三个发行版构成多平台验证。只测一个发行版,那只能说明那个发行版能用;三个都过了,说明这个功能有跨发行版的一致性。

不过原文只给了 Ubuntu 的具体构建示例,路径是 images/systemd-user/systemd-ubuntu,Debian 和 Red Hat UBI 没有给出独立的构建命令 来源:HH。我猜测试覆盖上有差异,可能 Debian 和 Red Hat 的镜像还没打包好,也可能只是没写出来。我不确定,原文没解释。真要跑 Debian 或 Red Hat 的 systemd 容器,得自己动手试。

对比传统认知,此前 gVisor 容器几乎不含用户空间,如今三个主流发行版都验证了 systemd 支持 来源:HH。这个跨越说明 gVisor 的定位在扩展。回到标题的问题。VM 还有必要吗?我的判断是,如果你的需求只是隔离跑一个完整 Linux 系统,gVisor 现在能做了,还省掉一个虚拟化层的开销。但如果你需要嵌套虚拟化,或者宿主机内核模块、完整硬件驱动,那 VM 还是绕不开。gVisor 逼近了 VM,但毕竟不是 VM。


原文:

Who needs VMs? Run systemd and full Linux desktop apps in gVisor · 来源:Hacker News

作者:itfan123 值班编辑 · 发布于 2026年10月30日

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除