很多开发者与工作室会基于 Docker 容器搭建安卓云手机挂机环境,借助 noVNC 实现网页访问,搭配内网穿透完成外网远程管理。本文完整记录 budtmo/docker-android 部署、容器资源配额、网页访问、cpolar 外网穿透,同时讲解 Docker 架构云手机的工程难点。六边云手机底层就是基于 Docker 自研容器架构,把容器资源管控、网络、网页远程能力封装成成品服务。
一、前置环境准备
- Linux 宿主机(推荐 Ubuntu 22.04),CPU 开启 VT-x/AMD-V,加载 KVM 虚拟化模块(无 KVM,安卓容器会黑屏无法渲染画面)
- 宿主机预先安装 Docker 与 Docker Compose
- 服务器安全组放行 6080 端口(Web noVNC 网页访问);5555 为 ADB 端口,公网环境不建议直接暴露
- 硬件建议:单实例挂机至少 2 核 4G;多实例批量挂机,需要预留充足内存。挂机场景必须配置资源限制,防止单个容器吃光宿主机算力,导致所有挂机任务中断。
二、拉取镜像,启动挂机专用 Docker 安卓容器
选用 budtmo/docker-android 镜像,启动命令增加 CPU、内存配额,开启 WEB_VNC 网页桌面能力。
#拉取安卓镜像
docker pull budtmo/docker-android:emulator_11.0
#挂机专用启动命令,限制2核、3G内存,开启noVNC网页访问
docker run -d \
-p 6080:6080 \
-e EMULATOR_DEVICE="Samsung Galaxy S10" \
-e WEB_VNC=true \
--device /dev/kvm \
--memory=3g \
--cpus=2 \
--name android-gui-01 \
budtmo/docker-android:emulator_11.0
参数说明:
--memory=3g:限制容器最大内存,挂机场景防止内存持续上涨溢出--cpus=2:限制最大 CPU 核心,避免抢占宿主机全部算力WEB_VNC=true:开启 noVNC 网页桌面,浏览器直接访问安卓系统--device /dev/kvm:硬件虚拟化,降低 CPU 占用,提升画面流畅度
执行docker ps查看容器状态,状态 UP 代表容器正常运行。 查看容器实时资源占用:
docker stats android-gui-01
三、内网网页访问,验证挂机环境
-
查询宿主机内网 IP
ip a
-
浏览器访问
http://宿主机内网IP:6080打开页面后等待安卓系统完整初始化,加载完成后就能进入安卓桌面,安装 APP,配置挂机任务。
注意:安卓容器首次开机初始化耗时较长,不要频繁刷新页面,挂机任务建议等系统完全启动后再打开。
四、外网远程访问配置:cpolar 内网穿透(无公网 IP 场景)
内网访问只能在局域网使用,想要在外随时随地网页查看挂机进度、远程操作容器,需要内网穿透。 这里使用 cpolar,将宿主机 6080 端口映射为公网 https 地址。
1. 安装 cpolar
sudo curl https://get.cpolar.sh | sh
2. 启动隧道,转发 6080 端口
cpolar http 6080
执行完成后,终端会生成公网 https 地址,任意设备浏览器打开这个地址,即可外网远程访问 Docker 云手机,查看挂机状态。
长期挂机建议配置 cpolar 固定域名,避免每次重启隧道地址发生变化。
⚠️安全提醒
- 公网暴露 VNC 服务存在安全风险,务必增加访问鉴权,不要裸奔直接对外;
- ADB 端口 5555 禁止直接对公网开放,存在被恶意入侵风险;
- 不建议直接在公网裸跑挂机业务,配置防火墙、访问密码做好防护。
五、Docker 自建挂机环境 运维避坑(挂机高频踩坑点)
- 容器长期运行内存泄漏:挂机数天后容器内存持续上涨,应用卡死。解决方案:配置资源限制,增加定时脚本自动重启容器。
- KVM 丢失黑屏:服务器重启后 KVM 模块未加载,网页打开黑屏,挂机任务中断。服务器重启后必须检查虚拟化模块。
- 穿透隧道断线:cpolar/frp 服务意外停止,外网无法访问挂机环境,建议配置进程守护,自动重启穿透服务。
- 多实例端口冲突:搭建多台 Docker 云手机挂机,每个容器需要映射不同宿主机端口,例如 6081、6082。
- 带宽不足画面卡顿:外网远程访问延迟高、画面卡顿,可以调低 noVNC 分辨率,降低画质节省带宽。
查看容器日志定位挂机异常:
docker logs android-gui-01
六、自研 Docker 容器云手机:自建部署 vs 成品服务
很多人不知道,市面上部分商用云手机底层就是 Docker 容器架构,六边云手机就是基于 Docker 自研容器方案,下面对比从零自建容器和成品 Docker 云手机的差异。
✅自己从零搭建 Docker 安卓容器
优点:完全自主可控,数据保留在自己服务器,适合技术研究、应用自动化测试,可以自定义安卓镜像、环境参数。 缺点:
- 部署门槛高,需要掌握 Linux、Docker、KVM、内网穿透全套知识;
- 7×24 小时挂机运维成本高,内存泄漏、容器崩溃、隧道断线都需要人工维护;
- 多实例批量挂机时,端口管理、网络隔离、设备指纹都需要自己开发维护;
- 服务器硬件、带宽、安全防护全部自行承担。
✅成品 Docker 架构云手机(六边云手机)
底层同样采用 Docker 容器技术,提前完成容器镜像封装、cgroups 资源管控、网络隔离、noVNC 网页访问能力。 优点:开箱即用,不需要手动写 docker run 命令、配置 KVM、搭建内网穿透;底层做了内存泄漏优化,支持 7×24 小时稳定挂机,支持多实例批量管理,网页端直接远程管控挂机任务,省去大量运维排错时间。 缺点:按需计费,不适合纯技术学习研究。
简单总结:如果你是做技术学习、本地测试,适合自己从零搭建 Docker 云手机;业务长期挂机,需要随时外网远程管控,不想维护整套容器环境,可以直接选用底层 Docker 架构的成品云手机。
七、小结
Docker 搭建安卓云手机挂机环境,核心是启动容器开启 WEB_VNC、配置 CPU 内存资源限制;内网直接 IP+6080 端口网页访问;外网远程管理挂机任务,依靠内网穿透工具暴露端口。
Docker 容器方案自由度很高,但长期挂机的稳定性、故障恢复、安全防护都需要持续运维。现在很多云手机产品底层就是 Docker 容器化架构,像六边云手机,把整套容器部署、网络、网页访问全部封装,适合需要快速落地挂机业务的用户。
结尾
如果你搭建 Docker 云手机挂机环境遇到容器崩溃、外网访问断连、黑屏等问题,可以在评论区留言,一起交流排查。