【问题标题】:Can't connect to host ADB from within docker container无法从 docker 容器中连接到主机 ADB
【发布时间】:2020-01-12 17:21:59
【问题描述】:

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

我有一个 docker 容器在我的机器上运行,具有以下 docker-compose 配置

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 是我的安卓模拟器地址,如图

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

效果很好。

如果您能提供任何帮助,我将不胜感激。如果需要任何其他信息,请告诉我。谢谢。

【问题讨论】:

  • 你是从 docker 容器运行adb -H yyy.yyy.yyy.yyy devices 吗?
  • @Lino 是的,这是正确的
  • 有什么解决办法吗?我有同样的问题:/
  • 是的,我可以在几个小时内发布,但我认为不值得

标签: docker networking adb


【解决方案1】:

这似乎是网络问题.... 要从 docker 容器中访问主机,您有 2 个选项:

  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
    
  2. 向 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

【讨论】:

  • 我尝试了 network_mode: host 但由于某种原因,该项目没有启动。仅供参考,我正在尝试举办博览会
  • 如何找到“访问主机上docker bridge接口的ip”
  • 查看更新的答案,尝试使用简单的busybox容器进行检查
  • 有趣,如果我使用busybox执行第一组命令,它表示端口是打开的,但如果我在容器内执行相同操作,则会抛出此错误“192.168.240.1:反向主机查找failed: Unknown host" 192.168.240.1 是我容器内第一个命令的输出
【解决方案2】:

如果您在主机上输入adb devices 的设备列表,并且如果您想在容器的控制台中获得相同的列表运行相同的命令,我建议您尝试使用 ssh 进行端口转发 .

请检查this answer 或此repo

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 2019-08-05
    • 1970-01-01
    相关资源
    最近更新 更多