docker+ws-scrcpy实现用浏览器操控手机
本文基于 Docker 在 Windows 系统部署 Web 端手机投屏控制工具,优化操作顺序、修正原文错误、补充必要前置步骤与排错说明,所有命令可直接复制使用。
一、基础环境部署
1.1 安装 Windows 版 Docker
首先在 Windows 系统中安装 Docker Desktop for Windows,该软件依赖 WSL2 环境,是后续运行容器的基础。
1.2 更新 WSL 子系统
打开 Windows 终端、CMD 或 PowerShell,执行以下命令更新 WSL 环境:
1 | wsl --update |
等待更新完成后,重启终端或电脑确保配置生效。
二、拉取 Web-Scrcpy Docker 镜像
2.1 废弃镜像说明
尝试拉取 scavin/ws-scrcpy 镜像:
1 | docker pull scavin/ws-scrcpy |
问题:受网络影响,该镜像大概率拉取失败,不推荐使用。
2.2 正式可用镜像(推荐)
使用项目官方镜像 ghcr.io/neanc/web-scrcpy:latest,稳定性更强,执行拉取命令:
1 | docker pull ghcr.io/neanc/web-scrcpy:latest |
- 项目开源地址:https://github.com/NEANC/Web-Scrcpy-Docker
- 拉取完成后,可在 Docker Desktop 的 Images(镜像) 列表中查看该镜像(⚠️ 注意:Images 中展示的是镜像,并非容器,运行镜像后才会生成容器)。
三、准备 ADB 工具
Windows 端的 Docker 无法直接读取手机 USB 设备,因此需要单独准备 ADB 工具。
工具可从上述项目开源仓库中获取,下载后解压,可将 ADB 目录配置到系统环境变量,或直接在解压目录下执行命令。
四、手机端前置配置(必做)
1.打开安卓手机,进入设置 → 关于手机,连续点击版本号,开启开发者选项;
2.进入开发者选项,开启 USB 调试、USB 网络调试 两项权限;
3.使用 USB 数据线将手机与电脑连接。
五、ADB 连接手机并切换端口模式
依次执行以下命令,完成设备识别与模式切换:
1.切换为 USB 连接模式
1 | adb usb |
2.检查设备是否正常识别
1 | adb devices |
执行成功后,终端会显示一串设备序列号,代表手机已被电脑识别。
3.切换为 TCP 端口模式
Windows Docker 无法直接访问 USB 设备,需将手机连接转为网络端口模式(示例端口使用 5555,可自定义):
1 | adb tcpip 5555 |
六、启动 Docker 容器
6.1 图形界面运行问题说明
若直接在 Docker Desktop 图形界面选中镜像点击「运行」,会出现后台临时服务器无法访问的问题,不建议使用图形界面启动。
6.2 命令行创建并启动容器
在终端执行以下完整命令,一键构建并运行容器(端口、挂载、权限等参数已配置完成):
1 | docker run -d --name web-scrcpy --hostname web-scrcpy -p 5000:5000 -v ./data:/app/data -v /dev/bus/usb:/dev/bus/usb --privileged --restart unless-stopped -e FLASK_ENV=production -e FLASK_APP=app.py ghcr.io/neanc/web-scrcpy:latest |
- 执行后终端会返回一串容器 ID 字符串,代表容器创建并后台启动成功;
- 后续可通过 Docker CLI 或 Docker Desktop 管理该容器。
七、网页端连接手机
1.查看手机当前的 IP 地址(可在手机 WLAN 详情、路由器后台查看);
2.打开电脑浏览器,访问地址:http://localhost:5000 或 http://电脑本机IP:5000;
3.在网页输入框填写「手机 IP: 端口」(例:192.168.1.100:5555),点击连接;
4.此时手机会弹出调试授权提示,选择允许即可完成投屏连接。
八、注意事项与故障排查
1.音频问题
设备连接成功后,手机外放会自动关闭,如需收听声音,可搭配耳机使用。
2.画面卡顿 / 操作无响应
若出现画面卡住、点击无反应等异常,直接断开网页连接,重新发起连接即可,可多次重试。
3.授权弹窗
网页发起连接请求时,手机一定会弹出调试授权窗口,若未弹出,请重新插拔 USB、重新开启 USB 调试。
4.连接失败通用排查
- 检查 adb devices 是否能识别到手机设备;
- 关闭电脑防火墙、杀毒软件,避免端口 5000 / 5555 被拦截;
- 确认手机与电脑处于同一局域网。