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

如何通过web-build文件夹运行Docker化的Expo React Native Web

解决React Native Web Docker容器无法加载应用的问题

问题描述

我通过npx expo export:web在项目根目录生成了web-build生产构建文件夹,本地进入该文件夹执行npx serve可在http://localhost:3000正常启动应用。但通过docker compose -f docker-compose-prod.yml build构建镜像后,运行容器访问http://localhost:19006仅显示项目根目录结构,无法加载应用。

当前使用的Dockerfile内容:

# pull base image

FROM node:lts-alpine


ARG NODE_ENV=production
ENV NODE_ENV $NODE_ENV


ARG PORT=19006
ENV PORT $PORT
EXPOSE $PORT 19001 19002


ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
ENV PATH /home/node/.npm-global/bin:$PATH
RUN npm i --unsafe-perm --allow-root -g npm@latest expo-cli@latest

RUN mkdir /opt/dwl_frontend
WORKDIR /opt/dwl_frontend
ENV PATH /opt/dwl_frontend/.bin:$PATH
COPY package.json yarn.lock ./
RUN yarn
RUN yarn install


WORKDIR /opt/dwl_frontend

COPY ./ ./ 


ENTRYPOINT [ "npx", "serve" ]

解决方案

1. 修正serve命令的目标目录

问题核心在于:容器中执行npx serve时,默认以当前工作目录(/opt/dwl_frontend)作为静态文件根目录,而你的应用静态文件实际在web-build子文件夹中,因此serve会展示根目录的文件列表而非启动应用。

修改Dockerfile的ENTRYPOINT,明确指定serveweb-build文件夹:

ENTRYPOINT [ "npx", "serve", "web-build", "-l", "$PORT" ]
  • -l $PORT指定服务监听的端口,确保和环境变量中的PORT一致。

2. 优化Docker镜像(可选)

当前Dockerfile包含冗余步骤(重复执行yarn和yarn install),且生产环境不需要expo-cli或项目依赖(因为已经导出了静态文件)。可以改用更轻量的镜像来运行静态文件,比如nginx:

改用nginx的Dockerfile示例

FROM nginx:alpine

ARG PORT=19006
ENV PORT $PORT
EXPOSE $PORT

# 复制自定义nginx配置(处理SPA路由)
COPY nginx.conf /etc/nginx/conf.d/default.conf

# 将web-build文件夹复制到nginx默认静态文件目录
COPY web-build /usr/share/nginx/html

对应的nginx.conf配置文件

server {
    listen ${PORT};
    server_name localhost;

    root /usr/share/nginx/html;
    index index.html index.htm;

    # 处理React单页应用的路由,刷新页面时重定向到index.html
    location / {
        try_files $uri $uri/ /index.html;
    }
}

3. 确认Docker Compose端口映射

确保docker-compose-prod.yml中正确映射了容器端口到主机端口:

services:
  dwl_frontend:
    build: .
    ports:
      - "19006:19006"
    environment:
      - PORT=19006

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:12:33