从主机连接到在 docker 容器内运行的 Android 模拟器

问题描述 投票:0回答:1

我有一个运行 Ubuntu 的 docker 容器,而 Ubuntu 又运行 Android 模拟器的无头实例。我希望能够从运行 docker 容器的主机连接到该模拟器。我有以下 docker compose 文件:

tests:
    image: android-emulator-base:latest
    container_name: tests
    tty: true
    ports:
      - 5555:5555
      - 5554:5554
    networks:
      - mynet
    devices:
      - /dev/net/tun
    volumes:
      - /etc/resolv.conf:/run/resolv.conf
    privileged: true
    environment:
      - NETWORK_MODE=bridge
networks:
  mynet:
    driver: bridge

我在 ubuntu docker 容器中创建了一个桥接和 Tap 接口,以允许 Android 模拟器与桥接网络上的其他设备进行通信。 Ubuntu docker 容器的

ip a
输出如下:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 02:42:ac:14:00:04 brd ff:ff:ff:ff:ff:ff
    inet 172.20.0.4/16 brd 172.20.255.255 scope global br0
       valid_lft forever preferred_lft forever
3: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000
    link/ether ea:d1:06:a5:34:c9 brd ff:ff:ff:ff:ff:ff
41: eth0@if42: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP group default 
    link/ether 02:42:ac:14:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0

然后我使用

emulator -avd emulator -no-window -no-audio -port 5554 -skip-adb-auth -no-boot-anim -gpu off -net-tap tap0 &
启动 Android 模拟器。

但是当我尝试使用

adb connect localhost:5555
从主机连接到 Android 模拟器时,连接失败。

我在网上看到很多人建议我对托管 android 模拟器的 docker 容器使用主机网络配置 - 这确实解决了这个问题 - 但由于本问题范围之外的原因,使用主机网络不是一个选项。我还应该提到像

docker-android
这样的项目不适合我,因为我需要 ARM 机器。

为什么这不起作用?看起来如果 docker 容器被配置为转发端口 5555 和 5554,那么 Android 模拟器应该可以从主机访问。

android docker android-emulator docker-networking
1个回答
0
投票

您可以从主机连接到在 Docker 容器中运行的 Android 模拟器:

 +-----------------+    +-------------------------------+
 | Host Machine    |    | Docker Container (Ubuntu)     |
 |                 |    |                               |
 |  +-----------+  |    |  +-------------------------+  |
 |  | adb       |<----->|  | Android Emulator        |  |
 |  +-----------+  |    |  |  - Ports 5554, 5555     |  |
 |                 |    |  |  - Bridge and Tap       |  |
 |                 |    |  |    Interface            |  |
 |                 |    |  +-------------------------+  |
 +-----------------+    +-------------------------------+

您已经在 Docker Compose 文件中转发了必要的端口。端口 5554 和 5555 应允许从主机连接到模拟器。

要连接到模拟器,请在主机上使用命令

adb connect localhost:5555
。但是,正如您提到的,您无法建立连接。该问题可能与网络配置或 Docker 容器内模拟器的设置方式有关。

确保 Docker 容器的网络配置允许转发端口上的入站连接。您可以通过尝试连接到 Docker 容器(如果有)中不同端口上运行的其他服务来测试这一点。

确保 ADB 服务器正在您的主机上运行。您可以使用

adb start-server
来启动它。

在 Docker 容器内,检查模拟器是否正在运行并侦听正确的端口。您可以使用

netstat -tuln | grep 5554
来验证这一点。确保没有防火墙规则阻止主机上的连接。检查 Docker 容器和模拟器的日志中是否有任何可能表明问题的错误或警告。

© www.soinside.com 2019 - 2024. All rights reserved.