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

Docker环境下React Native/Expo的Metro Bundler无法正常启动

解决Docker中Expo项目仅返回JSON、无法显示Metro Bundler网页的问题

核心问题定位

你访问的localhost:9000是错误端口——Expo的Metro Bundler网页默认监听19002端口,而19000端口是Expo的API服务端口,访问它自然只会返回项目配置的JSON数据。

分步修复方案

1. 修正访问地址

直接访问 http://localhost:19002,应该就能看到Metro Bundler的网页界面。

2. 优化Docker配置(避免后续问题)

修改Dockerfile

简化配置并提升稳定性:

FROM node:18-alpine  # 推荐用指定版本而非latest,避免兼容性问题

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install -g expo-cli@latest
RUN npm install

EXPOSE 19000 19001 19002

CMD ["npm", "start", "--", "--host", "0.0.0.0"]
  • 用node:18-alpine镜像更小更稳定;
  • 提前安装项目依赖,避免容器启动时重复执行安装操作;
  • 启动命令添加--host 0.0.0.0,强制Expo绑定到容器内所有网络接口,确保宿主机能正常访问。
更新docker-compose.yml

替换<<my_local_ip_address>>为你宿主机的真实本地IP(比如192.168.1.100):

version: '3.7'

services:
   expo:
      container_name: expo-app
      build: ./
      ports:
        - 19000:19000
        - 19001:19001
        - 19002:19002
      volumes:
        - ./:/usr/src/app
        - /usr/src/app/node_modules
      environment:
        - EXPO_DEVTOOLS_LISTEN_ADDRESS=0.0.0.0
        - REACT_NATIVE_PACKAGER_HOSTNAME=192.168.1.100  # 替换为你的宿主机IP
        - EXPO_HOSTNAME=0.0.0.0
  • REACT_NATIVE_PACKAGER_HOSTNAME用于让移动端设备能连接到Metro服务;
  • 添加EXPO_HOSTNAME=0.0.0.0确保Expo服务在容器内全局可访问。

3. 重启容器生效

执行以下命令重新构建并启动容器:

docker-compose down
docker-compose build --no-cache
docker-compose up -d

额外注意事项

  • 确保宿主机防火墙没有屏蔽19000/19001/19002端口;
  • 如果移动端要连接,需要保证设备和宿主机在同一局域网内,并且使用宿主机IP访问(比如exp://192.168.1.100:19000)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:11:09