You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

容器化Appium测试:无法连接AndroidUiautomator2Driver求助

问题

在Docker容器中使用Appium自动化Android平台的Flutter应用,已成功连接主机ADB并安装Appium Settings及Flutter应用,但无法连接AndroidUiautomator2Driver,核心错误为connect ECONNREFUSED 127.0.0.1:8200。

相关日志

[ADB] Running '/usr/lib/android-sdk/platform-tools/adb -P 5037 -s RR8W802EFNN install -r -g /home/myuser/app-debug.apk'
[ADB] The installation of 'app-debug.apk' took 7979ms
[ADB] Install command stdout: Performing Streamed Install
[ADB] Success
[AndroidUiautomator2Driver@9de5 (9d152cd0)] Performing shallow cleanup of automation leftovers
[AndroidUiautomator2Driver@9de5 (9d152cd0)] No obsolete sessions have been detected (connect ECONNREFUSED 127.0.0.1:8200)
[ADB] Running '/usr/lib/android-sdk/platform-tools/adb -P 5037 -s RR8W802EFNN shell am force-stop io.appium.uiautomator2.server.test'
[AndroidUiautomator2Driver@9de5 (9d152cd0)] Starting UIAutomator2 server 5.12.16
[AndroidUiautomator2Driver@9de5 (9d152cd0)] Using UIAutomator2 server from '/home/myuser/.appium/node_modules/appium-flutter-driver/node_modules/appium-uiautomator2-driver/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-v5.12.16.apk' and test from '/home/myuser/.appium/node_modules/appium-flutter-driver/node_modules/appium-uiautomator2-driver/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-debug-androidTest.apk'
[AndroidUiautomator2Driver@9de5 (9d152cd0)] Waiting up to 30000ms for UiAutomator2 to be online...
[ADB] Creating ADB subprocess with args: ["-P","5037","-s","RR8W802EFNN","shell","am","instrument","-w","-e","disableAnalytics","true","io.appium.uiautomator2.server.test/androidx.test.runner.AndroidJUnitRunner"]
[AndroidUiautomator2Driver@9de5 (9d152cd0)] Matched '/status' to command name 'getStatus'
[AndroidUiautomator2Driver@9de5 (9d152cd0)] Proxying [GET /status] to [GET http://127.0.0.1:8200/status] with no body
[AndroidUiautomator2Driver@9de5 (9d152cd0)] connect ECONNREFUSED 127.0.0.1:8200
[AndroidUiautomator2Driver@9de5 (9d152cd0)] Matched '/status' to command name 'getStatus'
[AndroidUiautomator2Driver@9de5 (9d152cd0)] Proxying [GET /status] to [GET http://127.0.0.1:8200/status] with no body
[AndroidUiautomator2Driver@9de5 (9d152cd0)] connect ECONNREFUSED 127.0.0.1:8200

Dockerfile配置

RUN apt-get update  \
    && yes | apt-get install -y maven  \
    && yes | apt-get install usbutils \
    && apt install wget \
    && yes | apt-get install android-sdk \
    && yes | apt-get install android-tools-adb \
    && apt clean  \
    && rm -rf /var/lib/apt/lists/*


ENV ANDROID_HOME "/usr/lib/android-sdk"
ENV ANDROID_SDK_ROOT $ANDROID_HOME
ENV PATH $PATH:$ANDROID_HOME/platforms:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools
ENV ANDROID_ADB_SERVER_ADDRESS "host.docker.internal"


RUN useradd -ms /bin/bash myuser \
    && usermod -aG root myuser

USER myuser

SHELL ["/bin/bash", "--login", "-c"]

RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash \
    && source $HOME/.nvm/nvm.sh \
    && nvm install v16.18.1 \
    && npm install -g appium@latest \
    && appium driver install uiautomator2  \
    && appium driver install xcuitest  \
    && appium driver install --source=npm appium-flutter-driver  \
    && appium plugin install relaxed-caps  \
    && appium plugin install execute-driver \
    && appium plugin install --source=npm appium-wait-plugin

docker-compose.yml配置

services:
  service:
    image: image
    network_mode: host
    hostname: localhost
    volumes:
      - /Users/.m2:/home/myuser/.m2

已确认容器内curl http://127.0.0.1:8200连接被拒绝,但主机上访问正常,容器已设置network_mode: host,仍无法解决问题。


解决方案

1. 修正ADB端口转发配置

Uiautomator2 Server运行在设备上,Appium需要通过ADB端口转发访问设备的8200端口。由于容器连接的是主机的ADB服务器,需确保主机已完成端口转发:

  • 在主机执行:adb -s RR8W802EFNN forward tcp:8200 tcp:8200
  • 验证转发生效:adb forward --list,输出需包含RR8W802EFNN tcp:8200 tcp:8200

2. 调整Appium的Uiautomator2连接地址

容器内的Appium默认尝试访问127.0.0.1:8200,但实际该端口转发到主机,需强制Appium使用主机实际IP而非127.0.0.1:

  • 启动Appium会话时添加capability:"uiautomator2ServerHost": "主机实际IP地址"
  • 或在容器内设置环境变量:export APPIUM_UIAUTOMATOR2_SERVER_HOST=主机实际IP地址

3. 检查容器与主机ADB的权限一致性

  • 临时切换到root用户测试:修改Dockerfile中的USER root,重新构建镜像后运行
  • 检查主机ADB授权状态:adb devices确保设备已授权,容器内执行adb devices需显示相同设备列表

4. 重新安装Uiautomator2 Server

日志显示已安装服务器,但可能存在版本不兼容:

  • 容器内执行:appium driver uninstall uiautomator2,再重新安装:appium driver install uiautomator2
  • 手动推送对应版本APK到设备:adb install -r /home/myuser/.appium/node_modules/appium-uiautomator2-driver/node_modules/appium-uiautomator2-server/apks/appium-uiautomator2-server-v5.12.16.apk

5. 移除容器hostname设置

在docker-compose.yml中删除hostname: localhost,避免容器的localhost解析干扰主机端口访问:

services:
  service:
    image: image
    network_mode: host
    volumes:
      - /Users/.m2:/home/myuser/.m2

内容的提问来源于stack exchange,提问作者Youssef Ehab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:22:02