Docker云手机ADB远程访问,搭建自动化脚本完整教程

作者:六边云     发布于:2026-10-09 16:38:27

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 云手机

  1. 打开本地终端 / CMD,执行连接命令
adb connect 宿主机IP:5555
  1. 查看已连接设备
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 端口风险极高,不推荐裸奔。两种安全方案:

  1. SSH 隧道转发(推荐):本地建立 SSH 隧道,将服务器 5555 转发到本地端口,ADB 连接本地localhost端口,流量加密。
  2. 内网穿透:frp/cpolar 隧道,仅授权 IP 访问 ADB 端口,增加访问鉴权。

六、自建 Docker 容器 vs 六边云手机(自研 Docker 架构)

✅从零自建 Docker 安卓容器

优点:底层完全可控,镜像自定义,适合学习、定制化自动化测试。
缺点:

  1. 部署门槛高,需要维护 Docker、KVM、端口、安全策略;
  2. 多实例批量管理,需要自己写脚本管理容器生命周期;
  3. ADB 授权、断线重连、容器崩溃恢复全部需要自行开发。

✅六边云手机(底层自研 Docker 容器架构)

底层基于 Docker 容器封装,原生支持 ADB 远程访问,内置设备隔离。
✅优点:

  1. 无需手动编写 docker 命令、部署 KVM,开箱即可开启 ADB 调试;
  2. 多实例批量管理,每个容器独立环境,支持批量下发自动化脚本;
  3. 底层做了容器保活,减少长时间自动化运行的崩溃、断连问题;
  4. 同时支持网页 VNC 可视化 + ADB 远程调试,脚本开发时可以网页实时查看画面。

❌缺点:适合业务落地,不适合底层 Docker 源码研究。

总结:如果你是学习 Docker+ADB 自动化,适合自己搭建容器;如果是批量跑自动化脚本、多设备并发测试,不想维护服务器底层,可直接选用六边云手机,自带 Docker 容器能力,直接调用 ADB 开发脚本。

七、ADB 远程访问常见故障排查

  1. adb devices 显示 offline:容器内安卓未完全启动,或者 ADB 授权未确认;重启容器,网页 VNC 确认调试授权。
  2. 连接超时:服务器防火墙 / 安全组没有放行 5555,或者 IP 地址错误。
  3. 脚本执行不稳定:自动化脚本必须增加延时,安卓界面加载需要时间,不能连续无间隔下发指令。
  4. 多容器端口冲突:每个 Docker 实例,宿主机映射不同端口,例如 5556、5557。

查看容器日志定位异常:

docker logs android-adb-01

八、自动化脚本开发注意事项

  1. 脚本增加异常捕获、失败重试、截图日志,方便定位执行失败问题;
  2. 不要短时间高频大量下发 ADB 指令,容易触发系统限流;
  3. 多设备并行执行时,每个设备使用独立 ADB 实例,做好设备隔离;
  4. 遵守应用协议,自动化脚本仅用于个人应用测试。

结尾

Docker 云手机搭配 ADB 远程访问,是安卓自动化测试非常实用的方案,通过端口映射建立远程连接,配合 Python 脚本,批量完成 APP 安装、模拟交互、截图采集。
自建 Docker 容器自由度高,但运维工作量大;如果需要快速落地多实例自动化,底层 Docker 架构的云手机可以省去大量底层部署工作,像六边云手机直接提供 ADB 访问能力,快速跑起自动化脚本。