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

如何将本地模拟器与Docker容器中的Expo裸应用成功连接?

问题描述

我的Dockerfile

FROM node:20-alpine3.16

WORKDIR /app

COPY package.json .
RUN npm install
COPY . .

EXPOSE 19006

CMD [ "npm" ,"start" ]

Android模拟器连接问题

运行命令 docker run -it --rm expo-app 启动Metro Bundler后,启动Android模拟器报错:

Failed to resolve the Android SDK path. Default install location not found: /root/Android/sdk. Use ANDROID_HOME to set the Android SDK location.
Failed to resolve the Android SDK path. Default install location not found: /root/Android/sdk. Use ANDROID_HOME to set the Android SDK location.
Error: spawn adb ENOENT

尝试设置环境变量 docker run -it --rm -e ANDROID_HOME=/users/rahulkumar/library/android/sdk expo-app,仍然报错:

Failed to resolve the Android SDK path. ANDROID_HOME is set to a non-existing path: /users/rahulkumar/library/android/sdk
Failed to resolve the Android SDK path. ANDROID_HOME is set to a non-existing path: /users/rahulkumar/library/android/sdk
Error: spawn adb ENOENT

iOS模拟器连接问题

启动iOS模拟器时出现错误:

Opening on iOS... ✔ Xcode must be fully installed before you can continue. Continue to the App Store? … yes Going to the App Store, re-run Expo CLI when Xcode has finished installing. Error: Command failed: open https://apps.apple.com/us/app/id497799835

问题:如何让Docker容器中的Expo裸应用成功连接本地模拟器?


解决方案

针对Android模拟器

操作步骤

  1. 挂载本地SDK并配置环境变量
    容器内没有Android SDK和adb工具,必须把本地SDK目录挂载到容器内,同时配置环境变量让Expo找到adb:

    docker run -it --rm \
      -v /users/rahulkumar/library/android/sdk:/android-sdk \
      -e ANDROID_HOME=/android-sdk \
      -e PATH="$PATH:/android-sdk/platform-tools:/android-sdk/tools" \
      expo-app
    
    • 替换/users/rahulkumar/library/android/sdk为你本地实际的Android SDK路径
    • 将adb所在的platform-tools和tools目录加入容器的PATH,确保Expo能调用adb
  2. 让容器连接本地模拟器
    本地终端执行命令开启模拟器远程连接:

    adb tcpip 5555
    

    获取本地主机IP(如192.168.1.100),进入容器终端执行:

    adb connect 192.168.1.100:5555
    

    完成后容器内的Expo即可连接到本地Android模拟器。

  3. 简化Dockerfile(可选)
    若不想每次运行都输入长命令,可在Dockerfile中预设环境变量:

    FROM node:20-alpine3.16
    
    WORKDIR /app
    
    ENV ANDROID_HOME=/android-sdk
    ENV PATH="$PATH:/android-sdk/platform-tools:/android-sdk/tools"
    
    COPY package.json .
    RUN npm install
    COPY . .
    
    EXPOSE 19006
    
    CMD [ "npm" ,"start" ]
    

    后续运行容器只需挂载SDK目录:

    docker run -it --rm -v /users/rahulkumar/library/android/sdk:/android-sdk expo-app
    

针对iOS模拟器

操作步骤

  1. 完成本地Xcode安装
    先在本地App Store安装Xcode,启动并完成初始化(同意协议、安装组件),确保本地能正常启动iOS模拟器。

  2. 分离Metro Bundler与模拟器操作
    容器仅负责运行Metro Bundler,本地处理模拟器连接:

    • 运行容器时暴露所有必要端口:
      docker run -it --rm -p 19000:19000 -p 19001:19001 -p 19002:19002 -p 19006:19006 expo-app
      
    • 本地打开浏览器访问http://localhost:19006,点击启动iOS模拟器即可,此时模拟器会直接连接到容器内的Metro服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:10:26