在 Docker 容器上运行 adb 时,为什么我在 DevTools 上看不到我的移动设备?

在 Docker 容器上运行 adb 时,为什么我在 DevTools 上看不到我的移动设备?

我正在尝试在移动设备上调试应用程序(或者只是检查 Chrome 浏览器中的页面),并且正在尝试使用 docker 容器来容纳 adb。在容器中启动 adb 服务器时一切都很顺利,我什至可以使用 列出我的设备adb devices,但是一旦我转到 chrome://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 &

3)添加该ip码头集装箱chrome检查,在Configure...(例如:172.23.0.2:5037,在这里使用ip,因为它必须在容器外部可见)。

相关内容