Docker容器无法连接主机ADB创建的UiAutomator2服务器求助
容器化测试自动化UiAutomator2连接拒绝问题解决方法
问题核心
容器内ADB能通过host.docker.internal访问主机ADB并列出设备,但主机本地启动的UiAutomator2服务端口未对容器开放,导致容器侧请求被拒绝。
具体解决步骤
1. 采用主机网络模式运行容器
让容器直接复用主机网络栈,无需额外端口映射即可访问主机和设备的所有端口:
docker run --network host your-test-automation-image
注意:此模式下容器内服务端口会与主机端口直接冲突,需确保端口不重复。
2. 固定UiAutomator2端口并映射到容器
- 先在测试代码中指定UiAutomator2使用固定端口(以Python为例):
from uiautomator2 import Device d = Device("your-device-serial") d.uiautomator_port = 6790 # 设置固定端口,可自定义
- 启动容器时添加端口映射:
docker run -p 6790:6790 -e ANDROID_ADB_SERVER_ADDRESS="host.docker.internal" your-test-automation-image
如果需要多个端口,可追加-p 6791:6791等。
3. 配置主机ADB监听所有地址
主机ADB默认仅监听本地回环地址,需修改为监听所有地址,确保容器侧请求能正确转发:
adb kill-server adb -a nodaemon server start
4. 调整主机防火墙规则
允许容器所在的Docker子网访问UiAutomator2端口(以Linux为例):
sudo ufw allow from 172.17.0.0/16 to any port 6790:6799
Windows/macOS可在系统防火墙设置中添加对应端口的允许规则。
内容的提问来源于stack exchange,提问作者Youssef Ehab
相关产品推荐
相关产品推荐

