Docker-Android 快速上手指南:一条命令拉起容器化 Android 模拟器
【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android
Docker-Android 把 Android 模拟器整个打包进 Docker 镜像:一条docker run就能在服务器上开出 Galaxy S10、Nexus 7 等真机外观的模拟器,支持 noVNC 网页查看、Appium UI 测试和 adb 外部控制。适合需要无头环境跑安卓测试、CI 集成或演示的测试工程师、DevOps 和移动端开发者。
二、它解决什么问题
- 本机装 Android Studio + 模拟器,占几 GB 磁盘,还得跟 IDE 抢 CPU 和 GPU。
- CI 机器上想跑 UI 自动化,却发现 CI 是 Linux 裸机,装模拟器环境又慢又不稳。
- 多台设备、多版本并行测试时,本机根本开不起。
Docker-Android 的做法是:模拟器 + Android SDK + noVNC + adb 全部预装在镜像里,按 Android 版本区分 tag(9.0 到 14.0),拉下来即用,跑完删掉不占地方。
三、开始前需要准备什么
硬件和系统要求如下,提前确认可以省掉后面大量排错时间:
| 项目 | 要求 | 说明 |
|---|---|---|
| 操作系统 | Ubuntu(Linux) | 镜像基于 Ubuntu 构建,只保证在 Ubuntu 宿主上运行 |
| 虚拟化 | CPU 支持 KVM 且已开启 | 容器内模拟器靠硬件加速跑,没有 KVM 基本起不来 |
| Docker | 已安装并可正常使用docker run | 无需其他依赖 |
| macOS / Windows | 需要套一层 Ubuntu 虚拟机 | 官方镜像不支持直接在 Mac/Windows 上跑 |
验证 KVM 是否可用:
sudo apt install cpu-checker kvm-ok输出KVM acceleration can be used才算通过。
四、最短路径跑起来
一条命令启动 Android 11.0 + Samsung Galaxy S10 模拟器:
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 的 6080 端口映射出来,供浏览器访问。-e EMULATOR_DEVICE="Samsung Galaxy S10":指定设备型号和外观皮肤,支持 S10/S9/S8/S7/S6、Nexus 4/5/7/One/S、Pixel C 等。-e WEB_VNC=true:启用网页端查看,不开就只能用 VNC 客户端连 5900 端口。--device /dev/kvm:把宿主机的 KVM 设备透传进容器,硬件加速的关键。--name android-container:给容器起名,后面docker exec、docker stop都靠它。budtmo/docker-android:emulator_11.0:镜像 tag,按 Android 版本选,emulator_9.0到emulator_14.0都有。
镜像里预置了这些设备型号的皮肤文件,位于 mixins/configs/devices/,EMULATOR_DEVICE的值必须和列表里的名字完全一致。
等 1~2 分钟(首次启动模拟器较慢),浏览器打开http://localhost:6080,你会看到模拟器桌面上立着一台 Galaxy S10,能点能滑。
随时查启动进度:
docker exec -it android-container cat device_status状态变成boot_completed即代表安卓系统启动完成。
五、常用配置速查
核心开关都是环境变量,完整清单见 CUSTOM_CONFIGURATIONS.md。
VNC / 网页访问
| 变量 | 作用 | 示例 |
|---|---|---|
WEB_VNC | 是否开启网页端(默认端口 6080) | -e WEB_VNC=true |
WEB_VNC_PORT | 改 noVNC 端口 | -e WEB_VNC_PORT=6081配合-p 6081:6081 |
VNC_PASSWORD | 给 VNC 连接加密码 | -e VNC_PASSWORD=thisissecret |
URL 上还能加参数:http://localhost:6080/?autoconnect=true&view_only=true可直接自动连接并设为只读,方便给别人看。
模拟器本体
| 变量 | 作用 | 默认值 |
|---|---|---|
EMULATOR_NAME | 自定义模拟器名字 | 设备名 + 安卓版本 |
EMULATOR_DATA_PARTITION | 数据分区大小 | 550m,装 app 多就调大,如900m |
EMULATOR_NO_SKIN | 去掉设备外壳皮肤,省一点渲染开销 | false |
EMULATOR_ADDITIONAL_ARGS | 透传任意参数给 android emulator 命令行 | 见 Android 官方文档 |
日志与测试
| 变量 | 作用 |
|---|---|
WEB_LOG/WEB_LOG_PORT | 通过网页 UI 看容器内日志文件,默认端口 9000 |
APPIUM/APPIUM_ADDITIONAL_ARGS | 开启 Appium Server(开 4723 端口),参数可透传 |
数据持久化
默认行为是容器重启后模拟器数据清空。需要保留装的 app、账号等状态时,把数据目录挂成命名卷:
docker run -v data:/home/androidusr budtmo/docker-android:emulator_11.0六、跑起来之后能干什么
- adb 外部控制:启动时加
-p 5554:5554 -p 5555:5555,宿主机执行adb connect <容器IP>:5555即可把容器内模拟器当成 adb 设备,装 apk、抓日志、发消息全都能做。细节见 USE_CASE_CONTROL_EMULATOR.md。 - 模拟短信:
docker exec -it android-container adb emu sms send <号码> <消息>,做 OTP 验证测试很方便。见 USE_CASE_SMS.md。
- CI 集成:Jenkins / 云主机上无头跑,见 USE_CASE_JENKINS.md 和 USE_CASE_CLOUD.md。
- Appium UI 测试:加
-p 4723:4723 -e APPIUM=true即可,见 USE_CASE_APPIUM.md。
七、容易踩的坑
坑 1:容器起不来 / 模拟器卡在启动。九成是 KVM 没透传。先跑kvm-ok确认宿主机支持,再确认docker run带了--device /dev/kvm。Windows 用户在 WSL2 里还需要额外配置(把用户加进kvm组、在.wslconfig开nestedVirtualization=true),README 的 "WSL2 Hardware acceleration" 一节有完整步骤。
坑 2:浏览器打不开localhost:6080。端口映射漏了或端口被占。确认启动命令里有-p 6080:6080;端口冲突就换WEB_VNC_PORT一起改,两边保持一致。另外WEB_VNC=true忘了设的话,网页入口根本不存在。
坑 3:重启容器后 app 全没了。这是默认设计(每次全新设备),不是 bug。要么接受"跑完即焚",要么按上面"数据持久化"一节挂卷到/home/androidusr。
坑 4:装了几个稍大的 app 就 OOM 或分区满。默认数据分区只有 550m,用EMULATOR_DATA_PARTITION=900m调大即可。
延伸阅读
仓库内文档都在 documentations/ 目录,按使用场景组织:
- USE_CASE_BUILD_ANDROID_PROJECT.md:用镜像编译安卓工程
- USE_CASE_APPIUM.md:Appium 自动化测试接入
- USE_CASE_CLOUD.md:部署到 Azure / AWS / GCP
- DOCKER-ANDROID-PRO.md:Pro 版功能对比(代理、root、headless 等)
- CUSTOM_CONFIGURATIONS.md:全部可配环境变量与 URL 端点
【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考