通过 ADB 连接到 Docker 容器中的 USB Android 设备

新手上路,请多包涵

我创建了一个包含 Android SDK 的 Docker 映像,并试图在运行该映像的容器中公开我的 Android 手机。所以我使用了 --privileged 标志并按如下方式安装了 USB 设备:

 $ docker run --privileged -v /dev/bus/usb:/dev/bus/usb -d -P my-android:0.0.1

但是,当我运行 ADB devices 时,它没有显示 USB 设备:

 ubuntu@d56b666be455:~/Android/Sdk/platform-tools$ ./adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached

ubuntu@d56b666be455:~/Android/Sdk/platform-tools$

容器内的 lsusb 列出设备:

 ubuntu@d56b666be455:~$ lsusb
...
Bus 002 Device 017: ID 04e8:6866 Samsung Electronics Co., Ltd GT-I9300 Phone [Galaxy S III] (debugging mode)

然而,该设备在主机上是可见的:

 ⇒  ./adb devices
List of devices attached
4d11abcd65b74045    device

主机操作系统

$ uname -a
Linux ananya 3.16.0-33-generic #44~14.04.1-Ubuntu SMP Fri Mar 13 10:33:29 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

码头工人版本

$ docker --version
Docker version 1.5.0, build a8a31ef

可能是什么问题?

原文由 buzypi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

我不认为设备上运行的 ADB 守护进程可以连接到两个 ADB 服务器。尝试断开它与主机 ADB 的连接,然后将其连接到 Docker 容器的 ADB。

原文由 jlhonora 发布,翻译遵循 CC BY-SA 4.0 许可协议

当我尝试同样的方法时,我遇到了一些与此相关的其他问题,我想分享这些问题,以便其他人可以节省时间:

问题一:容器中没有安装lsusb

在我的例子中, lsusb 没有安装,所以我用下面的命令安装了它:

 apt-get update
apt-get install usbutils

问题 2:安装 lsusb 和 ADB SDK 后仍无法看到设备

您需要使用 -v 选项重新启动您的容器,是的,不要忘记按照其中一个答案所述终止 ADB 服务器。

在主机上:

 adb-kill server
docker run -ti -d --privileged -v /dev/bus/usb:/dev/bus/usb   container_name

如果有人想从头开始,我已经写了一篇关于它的博客文章:

如何将 ADB 设备连接到 Linux 容器

原文由 pankaj mishra 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题