GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

软件运维 --- 容器化 之 Docker安装安卓redroid

 一、什么是 redroid?

redroid(Remote Android)是开源的 GPU 加速云安卓方案,在 Linux 的 Docker/Podman/K8s 里运行完整 Android 系统容器,支持 amd64 和 arm64 架构。通过 ADB 连接,配合 scrcpy 实现屏幕投屏,适合自动化测试、CI 集成和云手机原型验证。


二、环境要求

项目要求
操作系统 Linux(推荐 Ubuntu 24.04)
Docker Engine + Compose V2
内存 ≥ 2~4 GB
权限 privileged: true
端口 宿主机 15555 → 容器 5555

⚠️ Docker Desktop(Windows/macOS)不可用,容器必须跑在 Linux 上。


三、镜像标签选择

标签说明推荐
15.0.0_64only-latest Android 15 纯 64 位 ✅ 本文推荐
15.0.0-latest Android 15,支持 32 位 APK 兼容需求时用
16.0.0_64only-latest Android 16,ADB 能连但无 Display 不推荐看屏
14.0.0_* 及更旧 旧版 Android 兼容旧包

四、部署步骤

第一步:准备内核模块(必做)

Bash
# 安装并加载 binder
sudo apt install -y linux-modules-extra-$(uname -r)
sudo modprobe binder_linux devices="binder,hwbinder,vndbinder"

# 挂载 binderfs(Ubuntu 24.04 无 /dev/binder,改用 binderfs)
sudo mkdir -p /dev/binderfs
sudo mount -t binder binder /dev/binderfs
ls -l /dev/binderfs/  # 看到 binder/hwbinder/vndbinder 即成功

Ubuntu 24.04 内核 ≥ 5.18 已移除 ashmem,modprobe ashmem_linux 报错属正常,后续用 androidboot.use_memfd=1 替代。

设置开机自动加载:

Bash
echo 'binder_linux' | sudo tee /etc/modules-load.d/redroid-binder.conf
echo 'binder /dev/binderfs binder defaults,nofail 0 0' | sudo tee -a /etc/fstab

第二步:拉取镜像

Bash
docker pull docker.xuanyuan.run/redroid/redroid:15.0.0_64only-latest

第三步:编写 compose.yml

YAML
services:
  redroid:
    image: docker.xuanyuan.run/redroid/redroid:15.0.0_64only-latest
    container_name: redroid
    restart: unless-stopped
    privileged: true
    volumes:
      - ./data15:/data
    ports:
      - "15555:5555"
    command:
      - androidboot.use_memfd=1
      - androidboot.redroid_width=720
      - androidboot.redroid_height=1280
      - androidboot.redroid_dpi=320
      # 有 GPU 时取消注释:
      # - androidboot.redroid_gpu_mode=auto

第四步:启动容器

Bash
sudo mkdir -p /www/wwwroot/redroid/data15
cd /www/wwwroot/redroid
docker compose up -d
docker compose ps  # 确认状态为 Up,端口为 15555->5555

第五步:ADB 连接

Bash
adb kill-server
adb connect 127.0.0.1:15555
adb devices  # 期望显示 127.0.0.1:15555  device

容器启动后需等待 30~60 秒再连接,系统启动需要时间。

第六步:Windows scrcpy 投屏

在 Windows 端(有桌面的机器)执行:

Bash
adb.exe connect 192.168.1.xxx:15555
scrcpy.exe -s 192.168.1.xxx:15555

五、关键配置参数

参数说明默认值
androidboot.redroid_width/height 分辨率 720×1280
androidboot.redroid_dpi DPI 320
androidboot.redroid_fps 帧率 GPU 约30,软件约15
androidboot.use_memfd 替代 ashmem false(新内核用 1)
androidboot.redroid_gpu_mode GPU 模式:guest/host/auto guest

六、安全注意事项

  • ADB 不要暴露到公网,只走内网、VPN 或 SSH 隧道
  • privileged: true 权限极高,严格控制 Docker 套接字访问
  • /data 目录(./data15)含完整 Android 数据,需妥善备份
  • 换大版本时必须使用独立数据目录,不可复用旧 /data

七、多实例部署

修改以下三项即可启动多个实例:

  1. container_name(如 redroid2)
  2. 宿主机端口(如 15556:5555
  3. 数据目录(如 ./data16:/data

八、常见问题速查

问题原因解决
ashmem_linux not found 内核 ≥ 5.18 已移除 use_memfd=1,正常现象
/dev/binder 不存在 新内核改用 binderfs 挂载 /dev/binderfs
容器启动即退出 binder 未加载或未挂载 检查 dmesg -T
出现 emulator-5554 offline 宿主机占用了 5555 端口 端口映射必须用 15555:5555
scrcpy 报 XDG 错误 在无桌面服务器上运行 改在 Windows/有桌面机器运行
Android 16 无法投屏 该版本暂无 Display 支持 改用 Android 15 镜像

九、命令速查

Bash
# 完整流程
sudo modprobe binder_linux devices="binder,hwbinder,vndbinder"
sudo mount -t binder binder /dev/binderfs
docker compose up -d
adb connect 127.0.0.1:15555

# 日常管理
docker compose ps / down
docker exec redroid getprop sys.boot_completed  # 值为 1 表示启动完成
docker exec redroid logcat -d | tail

# 调试信息收集
curl -fsSL https://raw.githubusercontent.com/remote-android/redroid-doc/master/debug.sh | sudo bash -s -- redroid

十、总结

redroid 是低成本自托管云安卓的最佳开源方案,核心要点:

  1. 仅支持 Linux,内核必须先完成 binderfs 挂载
  2. 推荐 Android 15(15.0.0_64only-latest),ADB + scrcpy 完整可用
  3. 端口用 15555,避免与 ADB 默认 5555 冲突
  4. scrcpy 投屏在客户端(Windows/带桌面电脑),服务器只需运行容器
  5. ADB 不暴露公网,安全第一

 

安装脚本备份

https://gitee.com/null_465_7266/docker-installation-script.git

posted on 2026-09-07 17:49  GKLBB  阅读(25)  评论(0)    收藏  举报