远程访问位于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", ... }