目录

我把Antigravity装进Docker还顺便解决了音频问题

概述

最近在折腾一个小项目:docker-antigravity

起因很简单——我想在服务器上跑 Antigravity,但它是一个桌面应用,服务器上没有图形界面,本地又不想常开。于是就想着能不能把它容器化,通过浏览器远程访问。

折腾了一番,做出来了,效果还不错,分享给有同样需求的朋友。


它能做什么

一行 docker run,在任意服务器上启动 Antigravity,然后打开浏览器就能用——跟本地跑没什么区别,但完全不需要在本地安装任何东西。

/%E6%88%91%E6%8A%8Aantigravity%E8%A3%85%E8%BF%9Bdocker%E8%BF%98%E9%A1%BA%E4%BE%BF%E8%A7%A3%E5%86%B3%E4%BA%86%E9%9F%B3%E9%A2%91%E9%97%AE%E9%A2%98/img.png

适合的场景:

  • 家里的 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 的官方仓库安装,不是什么第三方渠道,版本跟随官方更新。

在此基础上做了几件事:

  1. 替换 google-chrome-stable 的调用,加上 --no-sandbox。这是最关键的一步:Antigravity 登录时会通过 xdg-open 调用浏览器进行 OAuth 认证,在 Docker 容器里如果不加这个参数,Chrome 会静默崩溃,导致点击登录完全没反应。
  2. 写了个 wrapped-antigravity 启动器,处理锁文件清理和必要参数(同样带上 --no-sandbox
  3. 把 autostart 改成自动拉起 Antigravity,容器一起来应用就跑起来了
  4. custom-cont-init.d 脚本处理首次启动的初始化配置

整个 Dockerfile 不复杂,逻辑清晰,感兴趣可以直接看源码。


快速上手

最简单的方式,一行命令:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
docker run -d \
  --name=antigravity \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -e CUSTOM_USER=your-username \
  -e PASSWORD=your-password \
  -p 3000:3000 \
  -p 3001:3001 \
  -v ./config:/config \
  --shm-size="1gb" \
  --restart unless-stopped \
  ghcr.io/runzhliu/docker-antigravity:latest

然后打开浏览器访问 http://your-server-ip:3000,输入用户名密码,就进去了。

安全提示: CUSTOM_USERPASSWORD 一定要设置,不然端口暴露在公网上谁都能访问。

Docker Compose 版本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
services:
  antigravity:
    image: ghcr.io/runzhliu/docker-antigravity:latest
    container_name: antigravity
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
      - CUSTOM_USER=your-username
      - PASSWORD=your-password
    volumes:
      - ./config:/config
    ports:
      - 3000:3000
      - 3001:3001
    shm_size: "1gb"
    restart: unless-stopped

镜像由 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。