Dockerコンテナでadbを実行すると、DevToolsがモバイルデバイスを表示できないのはなぜですか?

Dockerコンテナでadbを実行すると、DevToolsがモバイルデバイスを表示できないのはなぜですか?

モバイルデバイスでアプリをデバッグしたい(またはChromeでページをスキャンしたい)、dockerコンテナを使用してadbを受け入れようとしています。コンテナでadbサーバーを起動すると、すべてがうまくいきます。を使用して自分のデバイスを一覧表示することもできますが、adb deviceschrome://inspect/#devices(ローカルコンピュータで)に移動すると、自分のデバイスを見ることはできません。デバイスが一覧表示されます。そこに。

これがDockerコンテナを実行する方法です。

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を追加してくださいドッカーコンテナChromeのチェックインConfigure...172.23.0.2:5037コンテナの外側に表示する必要があるため、ここではipを使用してください)。

関連情報