我把Antigravity装进Docker还顺便解决了音频问题
概述
最近在折腾一个小项目:docker-antigravity。
起因很简单——我想在服务器上跑 Antigravity,但它是一个桌面应用,服务器上没有图形界面,本地又不想常开。于是就想着能不能把它容器化,通过浏览器远程访问。
折腾了一番,做出来了,效果还不错,分享给有同样需求的朋友。
它能做什么
一行 docker run,在任意服务器上启动 Antigravity,然后打开浏览器就能用——跟本地跑没什么区别,但完全不需要在本地安装任何东西。
适合的场景:
- 家里的 NAS 或者小主机想跑 Antigravity,不想装桌面环境
- 想把 Antigravity 部署在云服务器上,随时随地访问
- 测试或者隔离使用,不污染本地环境
为什么不用 noVNC
容器化桌面应用,最常见的方案是 noVNC——VNC Server 把桌面画面编码成图像,通过 WebSocket 推到浏览器里的 VNC 客户端显示。配置简单,教程多,乍看上去是个好选择。
但 VNC 方案有一个致命弱点:不支持音频传输。
虽然 Antigravity 本身不是音乐应用,但在编程过程中,我经常需要打开浏览器听听歌或者处理视频相关的工作。如果用 noVNC,你只能看到画面在动,却听不到任何声音。对于需要音视频辅助的开发流程来说,这基本不可用。
要让音频也能从容器里传到浏览器,需要换一套方案:Selkies-GStreamer。它基于 WebRTC,把桌面画面和音频一起编码推流,浏览器端同时接收视频和音频,体验跟本地运行几乎没有区别。延迟也比 noVNC 低,操作更流畅。
所以这个项目选择基于 linuxserver/chrome(底层用 Selkies-GStreamer)而不是常见的 noVNC 方案,根本原因就是音频支持。
怎么实现的
核心依赖两个东西:
linuxserver/chrome — 这个镜像提供了一个轻量的 Openbox 桌面,通过 Selkies-GStreamer 把画面用 WebRTC 推到浏览器,延迟很低,操作流畅。
Antigravity 官方 Debian 包 — 直接从 Google Artifact Registry 的官方仓库安装,不是什么第三方渠道,版本跟随官方更新。
在此基础上做了几件事:
- 替换
google-chrome-stable的调用,加上--no-sandbox。这是最关键的一步:Antigravity 登录时会通过xdg-open调用浏览器进行 OAuth 认证,在 Docker 容器里如果不加这个参数,Chrome 会静默崩溃,导致点击登录完全没反应。 - 写了个
wrapped-antigravity启动器,处理锁文件清理和必要参数(同样带上--no-sandbox) - 把 autostart 改成自动拉起 Antigravity,容器一起来应用就跑起来了
- 用
custom-cont-init.d脚本处理首次启动的初始化配置
整个 Dockerfile 不复杂,逻辑清晰,感兴趣可以直接看源码。
快速上手
最简单的方式,一行命令:
|
|
然后打开浏览器访问 http://your-server-ip:3000,输入用户名密码,就进去了。
安全提示: CUSTOM_USER 和 PASSWORD 一定要设置,不然端口暴露在公网上谁都能访问。
Docker Compose 版本:
|
|
镜像由 GitHub Actions 自动构建
每次推送代码,CI 自动构建并推送到 GitHub Container Registry(ghcr.io),不需要自己 build,直接 pull 最新镜像就行。
项目地址
GitHub:github.com/runzhliu/docker-antigravity
镜像:ghcr.io/runzhliu/docker-antigravity:latest
如果对你有用,欢迎点个 Star,也欢迎提 Issue 和 PR。