2015-04-10 34 views
12

Tôi đã tạo hình ảnh Docker chứa SDK Android và đang cố gắng để hiển thị điện thoại Android của mình trong vùng chứa đang chạy hình ảnh này. Vì vậy, tôi đã sử dụng lá cờ --privileged và gắn các thiết bị USB như sau:Kết nối với Thiết bị Android USB trong Vùng chứa Docker qua adb

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

Tuy nhiên, khi tôi chạy adb devices, nó không chỉ cho tôi các thiết bị 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 bên trong container liệt kê các thiết bị:

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

thiết bị này là tuy nhiên có thể nhìn thấy trong máy chủ:

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

Hệ điều hành cài

$ 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 phiên bản

Điều gì có thể vấn đề này?

+3

Tôi không nghĩ rằng các daemon adb chạy trong thiết bị có thể được kết nối với hai máy chủ adb. Hãy thử ngắt kết nối nó khỏi adb của máy chủ của bạn và sau đó kết nối nó với adb của docker. – jlhonora

+0

Tuyệt vời! Đó có vẻ là lý do. Tôi ngắt kết nối với máy chủ adb và nó hoạt động tốt. Cảm ơn! Bạn có thể đăng câu trả lời để tôi có thể đánh dấu câu trả lời là câu trả lời đúng. – buzypi

Trả lời

11

Tôi không nghĩ rằng trình nền adb chạy trong thiết bị có thể được kết nối với hai máy chủ adb. Hãy thử ngắt kết nối nó khỏi adb của máy chủ của bạn và sau đó kết nối nó với adb của docker.

+1

Sau khi sử dụng tính năng này một thời gian, tôi thấy rằng trình nền adb bắt đầu tự động trên máy chủ và điều này ngăn không cho kết nối với vùng chứa Docker. Nếu bạn giết daemon adb trong máy chủ, thì trình nền adb của vùng chứa Docker có thể giao tiếp với điện thoại. – buzypi

0

Chúng tôi đang cố gắng phân bổ các xe buýt USB khác nhau cho các vùng chứa Docker khác nhau chạy các ứng dụng TeamCity.

Mỗi vùng chứa cần thiết lập ANDROID_ADB_SERVER_PORT đến một cổng khác (vì chúng tôi không sử dụng mạng riêng biệt).

Máy chủ không thể chạy adbd, bởi vì chỉ một adbd có thể nói chuyện với điện thoại tại bất kỳ thời điểm nào.

Mỗi vùng chứa được một trong các thư mục/dev/bus/usb/xxx, vì vậy chúng tôi có thể cắm điện thoại vào các vùng chứa cụ thể.

Chúng tôi phải đồng bộ hóa thư mục/dev/bus/usb/xxx vài giây một lần, để cho phép cắm nóng và khởi động lại - chỉ một vòng kết nối trên máy chủ chạy tar cf devxxx.tar/dev/bus/usb/xxx, docker cp để chuyển nó, sau đó docker exec để untar bên trong container/tmp, diff để phát hiện các nút để xóa, và mv -n để di chuyển các nút mới trong.


Trong thực tế, bởi vì chúng tôi đang chạy trên Linux, chúng ta có thể có lẽ chỉ cần thiết lập các kịch bản udev, mỗi http://ubuntuforums.org/archive/index.php/t-502864.html

0

Trong khi tôi đang cố gắng cùng, tôi chạy vào một số vấn đề khác liên quan đến đó, mà tôi muốn chia sẻ do đó có thể khác có thể tiết kiệm thời gian của họ:

vấn đề 1: lsusb không được cài đặt trên container

Trong trường hợp của tôi lsusb không được cài đặt, do đó cài đặt nó với bên dưới lệnh:

apt-get update 
apt-get install usbutils 

Vấn đề 2: Không thể xem thiết bị ngay cả sau khi lsusb và sdk adb cài đặt

bạn cần phải khởi động lại container của bạn với tùy chọn -v , và vâng đừng quên để giết máy chủ adb như đã nêu trong một trong những câu trả lời

trên máy chủ:

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

Trong trường hợp ai đó muốn làm điều đó từ đầu, tôi đã viết một blog về nó:

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

+0

@chade_ i sẽ cập nhật câu trả lời của tôi –

+1

"Tôi thấy URL này khá hữu ích" ... đến từ một người đã viết URL đã nói, có vẻ * VERY SUSPICIOUS *. Bạn nên tiết lộ liên kết của mình với bài đăng trên blog của mình. – FrankerZ

+0

@FrankerZ tôi đã viết blog này, nếu bạn cho rằng điều này vi phạm bất kỳ chỉ tiêu SO nào, tôi có thể xóa url –

Các vấn đề liên quan