容器里跑安卓模拟器:一条命令完成 Docker 部署
【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android
不想在宿主机装整套 Android 环境,又想让模拟器像服务一样随时拉起、随时销毁?docker-android 就是把 Android 模拟器装进 Docker 容器:屏幕在浏览器里打开,adb 从宿主机直连,适合做应用联调测试、Appium UI 自动化和云端批量跑机。
它是什么,能干嘛
一个预打包好的 Docker 镜像,把模拟器启动流程全封在里头,你只管docker run。角色分工一句话讲清:Docker 负责隔离与调度,Android 模拟器是干活的主体,noVNC 把屏幕画面推到浏览器,接上 Appium 之后就能用代码驱动整个容器跑 UI 测试。
开工前,先给环境做三项体检
- Docker 装好了吗:
docker version,能正常打印版本号即可。 - KVM 能开吗:
sudo apt install cpu-checker && kvm-ok,期望输出包含KVM acceleration can be used。KVM 是 Linux 的硬件虚拟化接口,这步不过关,模拟器会退回纯软渲染,慢到没法用。 - 系统是什么:Ubuntu 主机直接用;macOS/Windows 必须套一个装了 Ubuntu 的虚拟机,镜像只在 Ubuntu 上跑。Windows 11 可以用 WSL2 顶替,但要先
sudo usermod -a -G kvm ${USER}加入 kvm 用户组,在/etc/wsl.conf的[boot]段加/dev/kvm属主变更命令,在.wslconfig里写nestedVirtualization=true,最后wsl --shutdown重启生效。
🚀 一条命令拉起 Android 11 容器
目的:带硬件加速起一个模拟器,并让你能从浏览器看到屏幕。
docker run -d -p 6080:6080 -e EMULATOR_DEVICE="Samsung Galaxy S10" -e WEB_VNC=true --device /dev/kvm --name android-container budtmo/docker-android:emulator_11.0| 参数 | 作用 | 可替换值 / 说明 |
|---|---|---|
-d | 后台运行 | 想盯着启动过程可去掉它,前台跑 |
-p 6080:6080 | 把 noVNC 端口暴露给宿主机 | 换 6081 之类端口时,需同时加-e WEB_VNC_PORT |
-e EMULATOR_DEVICE="Samsung Galaxy S10" | 指定模拟的设备型号 | S9 / S8 / S7 Edge / S7 / S6,Nexus 4 / 5 / One / S,Nexus 7,Pixel C |
-e WEB_VNC=true | 打开浏览器访问入口 | 省略后改用本地 VNC 客户端连 5900 |
--device /dev/kvm | 把硬件虚拟化设备透传进容器 | 必选,没有它模拟器慢到不可用 |
--name android-container | 容器名 | 后续状态检查命令依赖它,改了名字检查命令也要跟着改 |
budtmo/docker-android:emulator_11.0 | 镜像 tag,对应 Android 版本 | 支持 9.0 到 14.0,tag 按emulator_版本号替换 |
怎么确认它真的活着
两条路,任选其一。浏览器打开http://localhost:6080,模拟器启动要一两分钟,成功的标准是看到 S10 的屏幕走完开机动画、停在主界面。终端侧再验一次:
docker exec -it android-container cat device_status会看到模拟器当前的状态。如果屏幕长时间黑屏,用docker logs android-container翻启动日志,看它卡在哪一步。
进阶:数据持久化、换机型、接 adb 与 SMS
- 数据持久化:容器默认在重启时销毁模拟设备。在上面那条 run 命令里加
-v data:/home/androidusr,装过的应用和数据跨重启都还在。 - 换设备、换系统:只改
EMULATOR_DEVICE的值和镜像 tag 尾部,其余不用动。 - 宿主机连 adb:run 命令里补上
-p 5554:5554 -p 5555:5555,宿主机终端执行adb connect <容器IP>:5555,细节见 documentations/USE_CASE_CONTROL_EMULATOR.md。 - 模拟收短信:
docker exec -it android-container adb emu sms send <phone_number> <message>,模拟器立刻弹出一条短信通知,测试短信验证码场景很常用。 - 接 Appium:UI 自动化测试时把驱动指向容器里的 adb,完整流程参考 documentations/USE_CASE_APPIUM.md。
🔧 高频踩坑速查
- Q:kvm-ok 不通过,或者根本没有 /dev/kvm?去 BIOS 里打开 CPU 虚拟化开关(Intel VT-x / AMD-V);WSL2 场景再核对上一节说的 kvm 用户组和嵌套虚拟化配置,拿不准以官方文档为准。
- Q:容器起来了,浏览器里却看不到模拟器?启动本身要几分钟,先别急。用前面那条 device_status 命令看状态,再用
docker logs查报错信息。 - Q:容器重启后数据没了?这是默认行为。加上前面说的
-v data:/home/androidusr卷挂载,下次重启就保留了。
现在你手里有一个能看屏幕、能 adb 直连、能跑 Appium 的 Android 容器。下一步建议:先挂上数据卷,再照着 UI 自动化的文档对着它跑起第一个测试。
【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考