在Docker容器中运行React Native/Expo时热重载失效问题求助
解决方案
路径不匹配修复(核心问题)
你的Dockerfile中指定的工作目录为/home,构建时代码也被复制到/home路径下,但docker-compose的卷挂载将本地代码映射到了/usr/src/app,两者路径完全不匹配,容器运行时读取的始终是构建阶段写入/home的静态代码,自然无法监听到本地文件修改。
对齐两端路径即可,推荐修改Dockerfile的路径配置:# 替换原COPY和WORKDIR配置 COPY . /usr/src/app/ WORKDIR /usr/src/app也可以修改docker-compose的挂载规则:
volumes: - .:/home补充环境变量与启动参数
现有配置基础上,在docker-compose的environment节点添加以下配置:- REACT_NATIVE_PACKAGER_HOSTNAME=你的宿主机局域网IP # 手机端访问时必填,本地模拟器可填127.0.0.1 - CHOKIDAR_INTERVAL=1000 # 降低文件轮询间隔,提升热更响应速度同时修改Dockerfile的启动命令清除Expo缓存:
CMD [ "expo", "start", "--clear" ]排除node_modules覆盖问题
本地的node_modules会覆盖容器内安装的依赖,容易出现版本兼容性问题,在docker-compose的volumes节点添加匿名卷排除该目录:volumes: - .:/usr/src/app - /usr/src/app/node_modules # 新增这一行跨系统文件监听适配
如果使用Windows WSL2运行Docker,需要将项目代码存放在WSL2的原生文件系统中,不要放在/mnt/开头的Windows挂载目录,跨系统文件系统的修改事件默认无法被Docker正常监听。
如果使用macOS,需要在Docker Desktop的设置->资源->文件共享中,将项目所在目录加入授权列表,避免权限限制导致监听失效。
修改完成后执行docker-compose down && docker-compose up --build -d重建容器即可生效。
内容的提问来源于stack exchange,提问作者BigJobbies
相关产品推荐
相关产品推荐

