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

expo build:web构建后Docker容器运行找不到正确入口点问题求助

问题原因
  • 自定义入口配置未正确生效:expo 默认的入口逻辑文件./node_modules/expo/AppEntry.js会默认去项目根目录查找App组件,你在app.json中配置的entryPoint没有覆盖该默认逻辑,导致构建/运行时仍然尝试读取不存在的../../App路径文件。
  • Dockerfile 逻辑错误:你本地执行expo build:web生成的web-build目录已经是编译完成的纯静态前端资源,不需要再通过npm run web触发expo服务启动,你当前的Dockerfile逻辑相当于重新启动expo开发/运行服务,会再次触发入口文件校验,触发报错。
解决方法

1. 修复本地构建配置

首先保证本地构建出的web-build目录可以正常运行,再打包Docker镜像:

  • 确认自定义入口文件index.js包含根组件注册逻辑,示例代码如下:
import { registerRootComponent } from 'expo';
// 替换为你实际项目的根组件路径
import MyRootComponent from './src/MyRoot';

registerRootComponent(MyRootComponent);
  • 在package.json中新增main字段指向自定义入口,优先级高于app.json中的配置,避免expo读取默认入口:
{
  "name": "your-project-name",
  "main": "./index.js",
  // 其他原有配置
}
  • 重新执行expo build:web,构建完成后本地验证:执行npx serve web-build,访问提示的端口确认页面可以正常打开,无报错。

2. 修正Dockerfile

web-build是纯静态资源,直接用nginx托管即可,不需要引入node环境运行expo服务,参考Dockerfile如下:

FROM nginx:stable-alpine
# 将本地构建好的静态资源复制到nginx默认托管目录
COPY ./web-build /usr/share/nginx/html
# 暴露80端口
EXPOSE 80
# 启动nginx
CMD ["nginx", "-g", "daemon off;"]

如果你需要用19006端口访问,启动容器时做端口映射即可:

docker build -t expo-web-app .
docker run -d -p 19006:80 expo-web-app

执行完成后访问http://localhost:19006即可正常打开应用。

内容的提问来源于stack exchange,提问作者An Old Guy and His Dog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:36:04