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

Mac M1环境下Docker容器中adb install卡住问题求助

解决M1 macOS Docker容器中adb远程安装APK卡住的问题

问题背景

基于ruby:latest镜像构建的Docker容器已安装android-sdk,主机(Apple M1芯片 macOS Ventura 13.0)执行adb devices可识别物理设备,容器内通过adb -H host.docker.internal devices也能正常列出设备,但容器内执行adb -H host.docker.internal install myapp.apk时会卡在Performing Streamed Install步骤,主机执行该操作则正常。已尝试--privileged启动容器无效,Windows主机下该容器可正常运行。需求是通过GitLab Runner触发操作,复用主机已验证的adb指纹,避免重复验证。

解决方案

  • 确保主机与容器adb版本一致
    主机执行adb version,容器内执行adb -H host.docker.internal version,确认两者版本完全匹配(包括主版本和补丁号)。版本不匹配会导致远程传输的兼容性问题,若不一致,在容器内安装与主机相同版本的adb。

  • 调整adb传输缓冲区大小
    在容器内执行安装命令时增加--buffer-size参数,缩小传输缓冲区,避免M1 Docker网络环境下的数据包阻塞:

    adb -H host.docker.internal install --buffer-size=65536 myapp.apk
    
  • 拆分推送与安装步骤
    绕过流式安装的传输逻辑,先将APK推送到设备临时目录,再远程执行安装:

    # 推送APK到设备
    adb -H host.docker.internal push myapp.apk /data/local/tmp/
    # 远程执行安装
    adb -H host.docker.internal shell pm install /data/local/tmp/myapp.apk
    
  • 使用host网络模式启动容器
    启动容器时指定--network host参数,让容器直接复用主机网络栈,无需通过host.docker.internal转发adb请求:

    docker run --network host -it your-ruby-android-image
    

    之后容器内直接执行adb devices和adb install myapp.apk即可,自动复用主机已验证的指纹。注意M1 macOS上Docker的host网络模式需确保容器运行在Linux模式下,可在Docker Desktop设置中开启“Use the new Virtualization framework”提升兼容性。

  • 检查macOS防火墙与安全设置

    • 在「系统设置-网络-防火墙」中确认Docker Desktop被允许通过防火墙;
    • 临时关闭第三方安全软件,测试是否解决传输拦截问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:08:03