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

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

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

但是,当我运行adb设备,它不显示我的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版本

 $ docker --version Docker version 1.5.0, build a8a31ef 

可能是什么问题?

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

我们正在尝试将不同的USB总线分配给运行TeamCity客户端的不同Docker容器。

每个容器需要将ANDROID_ADB_SERVER_PORT设置为不同的端口(因为我们没有使用分离的networking)。

主机无法运行adbd,因为在任何给定的时间只有一个adbd可以与手机通话。

每个容器都有一个/ dev / bus / usb / xxx目录,所以我们可以将电话插入特定的容器。

我们必须每隔几秒同步一次/ dev / bus / usb / xxx目录,以允许热插拔和重新启动 – 运行tar的主机上只有一个shell循环cf devxxx.tar / dev / bus / usb / xxx,docker cp传输它,然后docker exec解压容器的/ tmp,diff来检测要删除的节点,mv -n移动新的节点。


事实上,因为我们在Linux上运行,所以我们可以设置udev脚本,按照http://ubuntuforums.org/archive/index.php/t-502864.html