无法从docker容器内连接到主机ADB

hs1rzwqc  于 2023-05-28  发布在  Docker
关注(0)|答案(3)|浏览(315)

在此之前是我的场景,它说明了我的环境,以便更好地理解我的问题

我的机器上运行了一个docker容器,配置如下:

services: 
  addb-client:
    build:
     context: .
     dockerfile: Dockerfile
    ports:
      - 19000:19000
      - 19001:19001
      - 19002:19002
    tty: true
    volumes: 
      - ".:/code"

在我的host中,我执行以下命令

adb -a -P 5037 server nodaemon

然后我得到以下输出

adb I 01-12 11:06:05  2493  2493 auth.cpp:437] adb_auth_init...
adb I 01-12 11:06:05  2493  2493 auth.cpp:412] adb_auth_inotify_init...
adb I 01-12 11:06:05  2493  2499 transport.cpp:295] emulator-5554: write thread spawning
adb I 01-12 11:06:05  2493  2498 transport.cpp:282] emulator-5554: read thread spawning
adb I 01-12 11:06:05  2493  2493 transport.cpp:1373] fetching keys for transport emulator-5554
adb I 01-12 11:06:05  2493  2493 auth.cpp:489] Calling send_auth_response
adb I 01-12 11:06:05  2493  2493 adb.cpp:114] emulator-5554: offlin

然后在我的docker container中运行

adb connect yyy.yyy.yyy.yyy

yyy.yyy.yyy.yyy是我的Android模拟器地址,如图所示

failed to connect to 'yyy.yyy.yyy.yyy:5555': Connection timed out

但我被暂停了

我尽力了

adb connect xxx.xxx.xxx.xxx

但我得到了connection refused
注意事项:
1.命令,如,从容器内

adb -H yyy.yyy.yyy.yyy devices

效果很好。
我将感激你能提供给我的任何帮助。如果需要任何额外的信息,请让我知道。谢谢。

zbwhf8kr

zbwhf8kr1#

这似乎是一个网络问题……要从docker容器中访问主机,您有两个选项:
1.访问主机上Docker Bridge接口的IP

$ docker run -ti busybox /bin/sh
/ # netstat -rn | grep ^0.0.0.0 | awk '{print $2}'
172.17.0.1
/ # nc -vz 172.17.0.1 5037
172.17.0.1 (172.17.0.1:5037) open

1.向docker运行时添加参数,以通过'localhost'关键字提供从容器到主机的访问

$ docker run -ti busybox /bin/sh
/ # nc -vz localhost 5037 ### NOT WORKING

$ docker run -ti --net="host" busybox /bin/sh
/ # nc -vz localhost 5037
localhost (127.0.0.1:5037) open  ### WORKING

docker-compose的等价物是:

network_mode: host
t5zmwmid

t5zmwmid2#

对我来说,一个简单的解决方案是使用adb命令的-H选项,值为"host.docker.internal",这是Docker解析的特殊DNS名称。例如,如果您想在容器中使用adb列出所有可用设备,请使用以下命令:

adb -H host.docker.internal devices
vuktfyat

vuktfyat3#

如果你在主机上输入adb devices得到设备列表,如果你想在容器上的控制台中运行相同的命令得到相同的列表,我会给予一个建议,尝试用ssh**进行端口转发。
请检查此答案或此repo

相关问题