Docker云手机ADB远程访问,搭建自动化脚本完整教程
Docker云手机通过ADB远程访问,可编写自动化脚本实现应用安装、点击、日志采集。本文讲解容器端口映射、ADB连接、Python自动化示例,同时介绍底层自研Docker架构的六边云手机,简化ADB调试与多实例管理。
一、Docker 云手机 ADB 原理
安卓容器默认开启 ADB over TCP,端口 5555。
核心逻辑:启动 Docker 安卓容器时,把宿主机 5555 端口映射到容器 5555,本地 PC 通过`adb connect 宿主机IP:5555`建立远程连接,之后所有 adb 命令直接下发到容器内安卓系统。
多实例场景,每个容器映射不同宿主机端口,实现多台安卓容器并行执行自动化脚本。
二、前置环境准备
1. Linux 宿主机开启 CPU 虚拟化 VT-x/AMD-V,加载 KVM 模块(无 KVM 容器黑屏,安卓模拟器无法正常启动)
2. 宿主机安装 Docker 环境
3. 本地电脑安装 Android SDK Platform Tools(adb 工具)
4. 服务器安全组放行 5555 端口;**公网直接开放 5555 存在安全风险,生产环境建议 SSH 隧道访问**
三、启动 Docker 安卓容器,开放 ADB 端口
使用 budtmo/docker-android 镜像,启动命令同时映射 Web VNC(6080)和 ADB(5555)端口。
docker run -d \
-p 6080:6080 \
-p 5555:5555 \
-e EMULATOR_DEVICE="Samsung Galaxy S10" \
-e WEB_VNC=true \
--device /dev/kvm \
--memory=3g \
--cpus=2 \
--name android-adb-01 \
budtmo/docker-android:emulator_11.0参数说明:
- `-p 5555:5555`:ADB 核心端口映射,用于远程调试
- `--memory / --cpus`:资源限制,自动化长时间运行防止内存溢出
- `--device /dev/kvm`:硬件虚拟化,提升模拟器性能
容器启动完成后,查看容器状态
docker ps四、本地 PC 远程 ADB 连接 Docker 云手机
- 打开本地终端 / CMD,执行连接命令
adb connect 宿主机IP:5555
- 查看已连接设备
adb devices
返回结果出现 宿主机IP:5555 device,代表 ADB 连接成功。
如果显示 unauthorized,需要打开 VNC 网页,在安卓容器内确认调试授权。
基础 ADB 测试命令:
# 截图保存到本地
adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png ./
# 模拟点击坐标(500,1200)
adb shell input tap 500 1200
# 安装APK
adb install test.apk
H2:四、Python 自动化脚本示例(ADB 调用)
使用 subprocess 调用 adb 命令,简单自动化脚本,可循环执行点击、截图、日志采集,适合测试场景。
import subprocess
import time
# 目标ADB设备地址
device = "192.168.1.100:5555"
def adb_cmd(cmd):
"""执行adb命令"""
full_cmd = ["adb", "-s", device] + cmd
result = subprocess.run(full_cmd, capture_output=True, text=True)
return result
if __name__ == "__main__":
# 启动APP
adb_cmd(["shell","am start -n com.xxx.app/.MainActivity"])
time.sleep(3)
# 模拟点击
adb_cmd(["shell","input tap 500 1200"])
time.sleep(2)
# 截图
adb_cmd(["shell","screencap /sdcard/auto.png"])
adb_cmd(["pull","/sdcard/auto.png","./"])
print("自动化流程执行完成")
脚本可以扩展:循环任务、判断截图像素、采集日志、多设备并发执行。
五、外网远程 ADB 访问安全方案
直接公网暴露 5555 端口风险极高,不推荐裸奔。两种安全方案:
- SSH 隧道转发(推荐):本地建立 SSH 隧道,将服务器 5555 转发到本地端口,ADB 连接本地localhost端口,流量加密。
- 内网穿透:frp/cpolar 隧道,仅授权 IP 访问 ADB 端口,增加访问鉴权。
六、自建 Docker 容器 vs 六边云手机(自研 Docker 架构)
✅从零自建 Docker 安卓容器
优点:底层完全可控,镜像自定义,适合学习、定制化自动化测试。
缺点:
- 部署门槛高,需要维护 Docker、KVM、端口、安全策略;
- 多实例批量管理,需要自己写脚本管理容器生命周期;
- ADB 授权、断线重连、容器崩溃恢复全部需要自行开发。
✅六边云手机(底层自研 Docker 容器架构)
底层基于 Docker 容器封装,原生支持 ADB 远程访问,内置设备隔离。
✅优点:
- 无需手动编写 docker 命令、部署 KVM,开箱即可开启 ADB 调试;
- 多实例批量管理,每个容器独立环境,支持批量下发自动化脚本;
- 底层做了容器保活,减少长时间自动化运行的崩溃、断连问题;
- 同时支持网页 VNC 可视化 + ADB 远程调试,脚本开发时可以网页实时查看画面。
❌缺点:适合业务落地,不适合底层 Docker 源码研究。
总结:如果你是学习 Docker+ADB 自动化,适合自己搭建容器;如果是批量跑自动化脚本、多设备并发测试,不想维护服务器底层,可直接选用六边云手机,自带 Docker 容器能力,直接调用 ADB 开发脚本。
七、ADB 远程访问常见故障排查
- adb devices 显示 offline:容器内安卓未完全启动,或者 ADB 授权未确认;重启容器,网页 VNC 确认调试授权。
- 连接超时:服务器防火墙 / 安全组没有放行 5555,或者 IP 地址错误。
- 脚本执行不稳定:自动化脚本必须增加延时,安卓界面加载需要时间,不能连续无间隔下发指令。
- 多容器端口冲突:每个 Docker 实例,宿主机映射不同端口,例如 5556、5557。
查看容器日志定位异常:
docker logs android-adb-01
八、自动化脚本开发注意事项
- 脚本增加异常捕获、失败重试、截图日志,方便定位执行失败问题;
- 不要短时间高频大量下发 ADB 指令,容易触发系统限流;
- 多设备并行执行时,每个设备使用独立 ADB 实例,做好设备隔离;
- 遵守应用协议,自动化脚本仅用于个人应用测试。
结尾
Docker 云手机搭配 ADB 远程访问,是安卓自动化测试非常实用的方案,通过端口映射建立远程连接,配合 Python 脚本,批量完成 APP 安装、模拟交互、截图采集。
自建 Docker 容器自由度高,但运维工作量大;如果需要快速落地多实例自动化,底层 Docker 架构的云手机可以省去大量底层部署工作,像六边云手机直接提供 ADB 访问能力,快速跑起自动化脚本。















