Docker 컨테이너에서 adb를 실행할 때 DevTools에서 내 모바일 장치를 볼 수 없는 이유는 무엇입니까?

Docker 컨테이너에서 adb를 실행할 때 DevTools에서 내 모바일 장치를 볼 수 없는 이유는 무엇입니까?

모바일 장치에서 앱을 디버깅하려고 하며(또는 Chrome에서 페이지를 검사하려고 함) docker 컨테이너를 사용하여 adb를 수용하려고 합니다. 컨테이너에서 adb 서버를 시작할 때 모든 것이 잘 진행됩니다. 을 사용하여 내 장치를 나열할 수도 있지만 adb devices일단 chrome://inspect/#devices(로컬 컴퓨터에서)로 이동하면 내 장치를 볼 수 없습니다. 장치가 나열됩니다. 거기.

이것이 도커 컨테이너를 실행하는 방법입니다.

docker run --rm -it --privileged -v /dev/bus/usb:/dev/bus/usb -p 5037:5037 beevelop/ionic bash

내가 여기서 무엇을 놓치고 있는 걸까요? 9222, 9229( ) 등 일부 포트를 노출해 보았지만 -p 9222:9222 -p 9229:9229결과에는 아무런 영향이 없었습니다. usbutils컨테이너에도 설치해봤습니다 .

답변1

나는 이것을 다음과 같이 달성했습니다.

1)노출된 포트: 5037, 5554, 5555 및 5900(5037뿐만 아니라).

2)socat노출된 포트의 컨테이너 내부에서 실행하고 컨테이너 IP를 전달합니다(이를 진입점 파일에 넣거나 다른 명령보다 먼저 실행할 수 있음).

(ip가 172.23.0.2라고 가정)

socat tcp-listen:5037,bind=172.23.0.2,fork tcp:127.0.0.1:5037 &
socat tcp-listen:5554,bind=172.23.0.2,fork tcp:127.0.0.1:5554 &
socat tcp-listen:5555,bind=172.23.0.2,fork tcp:127.0.0.1:5555 &

컨테이너에 대해 호스트 이름( docker run --hostname...)이 정의된 경우 socat 명령에서 IP 대신 호스트 이름을 사용할 수 있습니다(IP를 변경할 수 있으므로 더 좋습니다). 예를 들어 호스트 이름이 다음과 같은 경우 android-emulator위 명령을 실행할 수 있습니다.

socat tcp-listen:5037,bind=android-emulator,fork tcp:127.0.0.1:5037 &
socat tcp-listen:5554,bind=android-emulator,fork tcp:127.0.0.1:5554 &
socat tcp-listen:5555,bind=android-emulator,fork tcp:127.0.0.1:5555 &

삼)이 IP를 추가하세요도커 컨테이너크롬 체크인 Configure...(예: 172.23.0.2:5037컨테이너 외부에 표시되어야 하므로 여기서는 ip를 사용하십시오).

관련 정보