2015-04-10 5 views
12

Я создал изображение Docker, которое содержит Android SDK, и пытаюсь выставить свой Android-телефон в контейнере с этим изображением. Таким образом, я использовал --privileged флаг и установлен на USB-устройства следующим образом:Подключение к USB-устройству Android в контейнере Docker через adb

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

Однако, когда я бегу ADB устройства, он не показывает мне устройство USB

[email protected]:~/Android/Sdk/platform-tools$ ./adb devices 
* daemon not running. starting it now on port 5037 * 
* daemon started successfully * 
List of devices attached 

[email protected]:~/Android/Sdk/platform-tools$ 

lsusb внутри контейнера перечислены устройства:

[email protected]:~$ 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 

Хост OS

$ 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 версия

Что может быть проблема?

+3

Я не думаю, что ADB запущен демон в устройстве может быть подключен к двум серверам ADB. Попробуйте отключить его от adb хоста, а затем подключите его к adb докере. – jlhonora

+0

Удивительный! Кажется, это и есть причина. Я отключил хост-машину adb, и она работала нормально. Благодаря! Вы можете отправить ответ, чтобы я мог отметить его как правильный ответ. – buzypi

ответ

11

Я не думаю, что демон adb, запущенный в устройстве, может быть подключен к двум серверам adb. Попробуйте отключить его от adb хоста, а затем подключите его к adb докере.

+1

После использования этого в течение некоторого времени я вижу, что демон adb запускается автоматически на хосте, и это предотвращает соединение с контейнером Docker. Если вы убьете демона adb на хосте, то демон adb докера Docker сможет общаться с телефоном. – buzypi

0

Мы пытаемся выделить разные USB-шины для разных контейнеров Docker, на которых работают клиенты TeamCity.

Каждый контейнер нуждается в настройке ANDROID_ADB_SERVER_PORT для другого порта (потому что мы не используем изолированную сеть).

Хост-компьютер не может запускать adbd, поскольку только один adbd может разговаривать с телефоном в любой момент времени.

Каждый контейнер получает один из каталогов/dev/bus/usb/xxx, поэтому мы можем подключать телефоны к конкретным контейнерам.

Мы должны синхронизировать каталог/dev/bus/usb/xxx каждые несколько секунд, чтобы разрешить горячее подключение и перезагрузки - всего лишь цикл оболочки на хосте, который запускает tar 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

0

В то время как я пытался то же самое, я столкнулся с некоторыми другими проблемами, связанными с этим, который я хотел бы поделиться, так что другие могут могу сэкономить свое время:

Задачу 1: 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 

В случае, если кто-то хотел сделать это с нуля, я написал блог на нем:

http://learningbysimpleway.blogspot.in/2018/02/how-to-connect-adb-devices-to-linux.html

+0

@chade_ я обновлю свой ответ –

+1

«Я нашел этот URL довольно полезным» ... исходя из того, кто написал указанный URL, кажется * ОЧЕНЬ ПОДОЗРИНО *. Вы должны раскрыть свою принадлежность к своему сообщению в блоге. – FrankerZ

+0

@FrankerZ Я написал этот блог, если вы считаете, что это нарушает норму SO, я могу удалить url –

Смежные вопросы