如何将Android设备接入Docker容器?ADB无法识别设备求助
解决Docker/WSL中ADB无法识别Android设备的问题
一、Ubuntu 22.04 + Docker场景
- 先确认主机端ADB正常识别设备
在主机执行adb devices,确保设备已授权且能被识别。如果主机都看不到,先解决主机的USB调试授权问题。 - 同步主机UDev规则到容器
- 主机上创建或编辑
/etc/udev/rules.d/51-android.rules,添加规则:
厂商ID可通过SUBSYSTEM=="usb", ATTR{idVendor}=="你的设备厂商ID", MODE="0666", GROUP="plugdev"lsusb获取(比如Google设备是18d1)。 - 重载UDev规则:
sudo udevadm control --reload-rules && sudo udevadm trigger - 启动容器时挂载该规则文件:
docker run -d --privileged -v /dev/bus/usb:/dev/bus/usb -v /etc/udev/rules.d/51-android.rules:/etc/udev/rules.d/51-android.rules --name adbd sorccu/adb
- 主机上创建或编辑
- 确保容器与主机ADB版本兼容
分别在主机和容器内执行adb version,主版本号需一致(比如都是1.0.41)。版本不兼容会导致设备无法识别。 - 容器内重启ADB服务
进入容器后执行:
再执行adb kill-server && adb start-serveradb devices查看设备。
二、Mac OS + Docker场景
Mac的Docker基于虚拟机,直接挂载/dev/bus/usb无效,需调整挂载方式:
- 主机确认设备可被ADB识别
执行ls /dev/tty.usb*找到设备路径(比如/dev/tty.usbmodem14101),同时确保主机adb devices能看到设备。 - 修改容器启动命令
直接挂载整个/dev目录或指定设备:docker run -d --privileged -v /dev:/dev --name adbd sorccu/adb - 容器内重启ADB服务
进入容器执行adb kill-server && adb start-server,再检查设备列表。
三、Windows WSL + usbip场景
- 检查WSL内ADB权限
执行sudo adb kill-server && sudo adb start-server,再运行adb devices,避免权限不足导致无法识别。 - 配置WSL的UDev规则
- 创建
/etc/udev/rules.d/51-android.rules,添加与Ubuntu相同的规则(替换为你的设备厂商ID)。 - 重启UDev服务:
sudo service udev restart
- 创建
- 将用户加入plugdev组
退出并重新登录WSL生效。sudo usermod -aG plugdev $USER - 手动调整设备权限
通过lsusb找到设备的Bus和Device号(比如Bus 001, Device 002),对应路径/dev/bus/usb/001/002,执行:
重启ADB后再次检查。sudo chmod 0666 /dev/bus/usb/001/002
内容的提问来源于stack exchange,提问作者Dmitry Kozin
相关产品推荐
相关产品推荐

