news 2026/9/11 3:14:00

容器里跑安卓模拟器:一条命令完成 Docker 部署

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
容器里跑安卓模拟器:一条命令完成 Docker 部署

容器里跑安卓模拟器:一条命令完成 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 3:12:37

ArduPilot 完整指南:如何用开源飞控快速上手无人机自主飞行

ArduPilot 完整指南&#xff1a;如何用开源飞控快速上手无人机自主飞行 【免费下载链接】ardupilot ArduPlane, ArduCopter, ArduRover, ArduSub source 项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot ArduPilot 是 DIY Drones 社区发起并维护的开源飞行…

作者头像 李华
网站建设 2026/9/11 3:10:47

用ResNet和AVEC2014实现抑郁症诊断:从数据预处理到模型训练全流程

简介&#xff1a;基于AVEC2014数据集与ResNet网络的抑郁症诊断Python源码&#xff0c;面向具备一定Python基础、希望入门深度学习医疗应用的开发者&#xff0c;完整覆盖从视频帧提取、人脸预处理、模型设计到训练测试的端到端流程&#xff0c;代码结构清晰&#xff0c;便于二次…

作者头像 李华
网站建设 2026/9/11 3:08:59

深入解析CMSIS-5:架构、模块与工程治理实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 3:08:13

基于Spring Boot的智能办公室管理系统:业务建模与权限设计实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 3:08:10

如何上手 ArduPilot:开源飞控固件从编译到模拟飞行的完整指南

如何上手 ArduPilot&#xff1a;开源飞控固件从编译到模拟飞行的完整指南 【免费下载链接】ardupilot ArduPlane, ArduCopter, ArduRover, ArduSub source 项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot 写一个能自主飞行的飞行器&#xff0c;最难的从来…

作者头像 李华
网站建设 2026/9/11 3:03:59

E5071C矢量网络分析仪多端口校准与S参数测试实战技巧

我这台E5071C矢量网络分析仪在实验室里开机了快五年&#xff0c;干过的活从单端口滤波器调试、双工器产线测试&#xff0c;到4端口功分器、耦合器和差分线缆的S参数测量&#xff0c;基本没停过。刚接手这台机器的时候&#xff0c;我也犯过低级错误&#xff0c;最典型的就是懒得…

作者头像 李华