2015-04-10 12 views
12

Ho creato un'immagine Docker che contiene l'SDK di Android e sto cercando di esporre il mio telefono Android in un contenitore che esegue questa immagine. Così ho usato la bandiera --privileged e montate le periferiche USB come segue:Connessione a un dispositivo Android USB in un contenitore Docker tramite adb

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

Tuttavia, quando si esegue adb devices, non mi mostra il dispositivo 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 all'interno del contenitore elenca il dispositivo:

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

il dispositivo è comunque visibile nell'ospite:

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

Host OS versione

$ 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

Quale potrebbe essere il problema?

+3

non credo che il demone adb in esecuzione nel dispositivo può essere collegato a due server adb. Prova a scollegarlo dall'adb della macchina host e quindi collegalo all'adb della finestra mobile. – jlhonora

+0

Fantastico! Questa sembra essere la ragione. Ho disconnesso la macchina host adb e ha funzionato bene. Grazie! È possibile inviare una risposta, in modo che io possa contrassegnarlo come la risposta giusta. – buzypi

risposta

11

Non credo che il demone adb in esecuzione nel dispositivo possa essere collegato a due server adb. Prova a scollegarlo dall'adb della macchina host e quindi collegalo all'adb della finestra mobile.

+1

Dopo averlo usato per un po 'di tempo, vedo che il demone adb si avvia automaticamente sull'host e questo impedisce la connessione con il contenitore Docker. Se si uccide il daemon adb nell'host, il daemon adb del contenitore Docker è in grado di comunicare con il telefono. – buzypi

0

Stiamo tentando di allocare diversi bus USB a diversi contenitori Docker che eseguono i client TeamCity.

Ogni contenitore necessita di un'impostazione ANDROID_ADB_SERVER_PORT su una porta diversa (perché non stiamo utilizzando una rete segregata).

La macchina host non può eseguire adbd, perché solo un adbd può parlare con un telefono in qualsiasi momento.

Ogni contenitore riceve una delle directory/dev/bus/usb/xxx, quindi è possibile collegare i telefoni in determinati contenitori.

Dobbiamo sincronizzare la directory/dev/bus/usb/xxx ogni pochi secondi, per consentire hot-plug e riavvii: solo un ciclo di shell sull'host che esegue tar cf devxxx.tar/dev/bus/usb/xxx, docker cp per trasferirlo, quindi docker exec per decomprimere all'interno del contenitore/tmp, diff per rilevare i nodi da eliminare e mv -n per spostare i nuovi nodi in.


In realtà, perché stiamo in esecuzione su Linux, possiamo probabilmente solo impostare gli script di udev, per http://ubuntuforums.org/archive/index.php/t-502864.html

0

Mentre stavo cercando la stessa cosa, mi sono imbattuto in alcuni altri problemi legati a questo, che vorrei condividere in modo che altri maggio possono salvare il loro tempo:

Problema 1: lsusb non è stato installato sul contenitore

Nel mio caso lsusb non è stato installato, quindi installato con sotto comando:

apt-get update 
apt-get install usbutils 

Problema 2: non è in grado di vedere dispositivo anche dopo lsusb e sdk ADB installazione

è necessario riavviare il contenitore con opzione -v , e sì non dimenticate di uccidere server di adb come affermato in una delle risposte

sull'host:

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

in caso qualcuno volesse farlo da zero, ho scritto un blog su di esso:

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

+0

@chade_ aggiornerò la mia risposta –

+1

"Ho trovato questo URL piuttosto utile" ... proveniente da qualcuno che ha scritto detto URL, sembra * MOLTO SOSPETTO *. Dovresti divulgare la tua affiliazione al tuo post sul blog. – FrankerZ

+0

@FrankerZ ho scritto questo blog, se pensi che questo violi qualsiasi norma SO, posso rimuovere l'url –

Problemi correlati