远程访问位于Docker容器内的ADB服务器

我在主机A上有一个Docker容器 ,它在端口 5022上导出一个SSH服务。例如,如果我想连接到容器,我通常使用ssh -p 5022 user@hostA

在Docker容器中,我有一个运行在端口5037(这是默认端口) 的ADB服务器 (Android Debug Bridge)。 例如,我可以在容器中运行adb devices来列出所有连接的Android设备和仿真器。

我想这样做,但从主机B远程 。 所以,从主机B,我想ADB adb devices被redirect到我的远程docker集装箱的ADB。

我试图build立一个如下这样的隧道: ssh -L 9999:127.0.0.1:5037 -N -T -p 5022 user@hostA ,然后adb -H 127.0.0.1 -P 9999 devices但它不工作:(并说error: protocol fault (no status)channel 2: open failed: connect failed: Connection refused被隧道channel 2: open failed: connect failed: Connection refused

隧道:

bash $ ssh -L 9999:127.0.0.1:5037 -N -T -p 5022 user@hostA user@hostA's password: channel 2: open failed: connect failed: Connection refused

亚行:

bash $ adb -H 127.0.0.1 -P 9999 devices error: protocol fault (no status)

编辑1:

我也尝试过(不成功): ssh -N -T -L 9999:172.17.0.11:5037 -p 5022 user@host其中172.17.0.11是ssh -N -T -L 9999:172.17.0.11:5037 -p 5022 user@host上的docker容器的本地IP地址。 然后adb -H 127.0.0.1 -P 9999 devices仍然不满意error: protocol fault (no status)

docker ps的输出是:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS cef3d4daf9bc cryptax/android-re "/usr/bin/supervisord" 23 hours ago Up 23 hours 0.0.0.0:5037->5037/tcp, 0.0.0.0:5554->5554/tcp, 0.0.0.0:5900->5900/tcp, 5555/tcp, 0.0.0.0:5022->22/tcp androidre

docker inspect androidre的输出包含:

 "HostConfig": { ... "PortBindings": { "22/tcp": [ { "HostIp": "", "HostPort": "5022" } ], "5037/tcp": [ { "HostIp": "", "HostPort": "5037" } ], "5554/tcp": [ { "HostIp": "", "HostPort": "5554" } ], "5900/tcp": [ { "HostIp": "", "HostPort": "5900" } ] }, ... "Config": { "Hostname": "cef3d4daf9bc", ... "ExposedPorts": { "22/tcp": {}, "5037/tcp": {}, "5554/tcp": {}, "5555/tcp": {}, "5900/tcp": {} }, ... "NetworkSettings": { "Bridge": "", "HairpinMode": false, ... "Ports": { "22/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "5022" } ], "5037/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "5037" } ], "5554/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "5554" } ], "5555/tcp": null, "5900/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "5900" } ] }, "Gateway": "172.17.0.1", ... "IPAddress": "172.17.0.11", "IPPrefixLen": 16, "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "Gateway": "172.17.0.1", "IPAddress": "172.17.0.11", ... }