2015-04-10 8 views
12

Utworzyłem obraz Docker zawierający zestaw SDK Androida i próbuję odsłonić telefon z Androidem w kontenerze z tym obrazem. Więc użyłem --privileged flagę i zamontowane urządzenia USB w następujący sposób:Podłączanie do urządzenia USB z systemem Android w pojemniku Docker za pośrednictwem AdB

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

Jednak, gdy biegnę urządzeń ADB, nie pokazuj mi urządzenie 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 wewnątrz pojemnika wymienia urządzenia:

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

urządzenie jest jednak widoczne w gospodarzu:

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

Host OS wersja

$ 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

Co może być problemem?

+3

Nie sądzę ADB demon działa w urządzeniu można podłączyć do dwóch serwerów adb. Spróbuj odłączyć go od adb komputera, a następnie podłącz go do adb dokarza. – jlhonora

+0

Awesome! To wydaje się być powodem. Odłączyłem adb komputera hosta i działało dobrze. Dzięki! Możesz wysłać odpowiedź, dzięki czemu mogę oznaczyć ją jako właściwą odpowiedź. – buzypi

Odpowiedz

11

Nie sądzę, że demona adb działającego w urządzeniu można podłączyć do dwóch serwerów adb. Spróbuj odłączyć go od adb komputera, a następnie podłącz go do adb dokarza.

+1

Po pewnym czasie użytkowania widzę, że demon adb uruchamia się automatycznie na hoście, co uniemożliwia połączenie z kontenerem Docker. Jeśli zabijesz demona adb na hoście, demon adb z kontenera Docker będzie mógł komunikować się z telefonem. – buzypi

0

Staramy się przydzielić różne magistrale USB do różnych kontenerów Docker z klientami TeamCity.

Każdy kontener potrzebuje ANDROID_ADB_SERVER_PORT ustawienia dla innego portu (ponieważ nie używamy segregacji sieciowej).

Komputer-host nie może uruchomić adbd, ponieważ tylko jeden adbd może rozmawiać z telefonem w danym momencie.

Każdy kontener otrzymuje jeden z katalogów/dev/bus/usb/xxx, dzięki czemu możemy podłączyć telefony do konkretnych kontenerów.

Musimy zsynchronizować katalog/dev/bus/usb/xxx co kilka sekund, aby umożliwić hot-plugging i ponowne uruchamianie - wystarczy pętla powłoki na hoście, który uruchamia tar cf devxxx.tar/dev/bus/usb/xxx, docker cp do przeniesienia, a następnie do dokowania exec do untar wewnątrz kontenera/tmp, diff do wykrywania węzłów do usunięcia, a mv -n do przenoszenia nowych węzłów do.


W rzeczywistości, ponieważ jesteśmy działa na Linuksie, możemy chyba tylko skonfigurować skrypty udev, za http://ubuntuforums.org/archive/index.php/t-502864.html

0

Chociaż starałem samo, wpadłem na kilka innych problemów związanych z tym, które chciałbym podzielić tak, że drugi może można zaoszczędzić swój czas:

problem 1: lsusb nie został zainstalowany na pojemniku

W moim przypadku lsusb nie został zainstalowany, więc zainstalowałem go z poniższej komendy:

apt-get update 
apt-get install usbutils 

Problem 2: nie widzieć urządzenia nawet po lsusb i adb sdk instalacji

trzeba uruchomić ponownie pojemnik z opcją -v i tak nie zapomnij, aby zabić serwer adb jak wspomniano w jednym z odpowiedzi

na hoście:

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

W przypadku gdy ktoś chciał to zrobić od podstaw, pisałem bloga na nim:

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

+0

@chade_ zaktualizuję moją odpowiedź –

+1

"Znalazłem ten URL całkiem przydatny" ... pochodzące od kogoś, kto napisał ten adres URL, wydaje się być BARDZO SŁYSZALNE *. Powinieneś ujawnić swoją przynależność do swojego posta na blogu. – FrankerZ

+0

@FrankerZ Napisałem tego bloga, jeśli uważasz, że to narusza jakąkolwiek normę SO, mogę usunąć adres URL –

Powiązane problemy