Docker部署Node.js项目出现MODULE_NOT_FOUND错误求助
解决Node.js Docker部署中MODULE_NOT_FOUND(找不到routes/offers.js)的问题
1. 核对本地文件与镜像内路径一致性
- 确认本地项目中
routes/offers.js真实存在,注意大小写——Docker容器基于Linux环境,文件名区分大小写,比如本地是Offers.js但代码里写offers.js必然报错。 - 检查Dockerfile的
COPY命令是否完整复制了项目文件:
正确的依赖安装+文件复制流程应该是:
如果漏写# 先复制依赖配置文件 COPY package*.json ./ RUN npm install # 再复制整个项目代码 COPY . .COPY . .或者复制路径有误,镜像内不会生成routes目录。
2. 确认Docker工作目录配置
- 检查Dockerfile是否通过
WORKDIR /usr/src/app指定了工作目录。如果没设置,后续COPY的文件会被放到容器根目录,代码里的相对路径基于/usr/src/app就会找不到模块。
3. 排查代码中的模块引用路径
- 打开项目中引用
offers.js的入口文件(比如app.js),确认引用路径正确:- 若用相对路径(如
require('./routes/offers')),要保证该路径相对于入口文件的位置。比如入口在根目录,routes也在根目录,这个路径没问题;如果入口在src目录,就得写成require('../routes/offers')。 - 尽量避免用绝对路径引用,除非你完全清楚镜像内的路径结构。
- 若用相对路径(如
4. 清理Docker缓存后重新构建
- Docker缓存可能保留旧的文件结构,执行无缓存构建:
再启动容器测试问题是否解决。docker build --no-cache -t edeka3 .
5. 进入容器手动验证文件结构
- 启动临时容器进入镜像内部,查看文件是否存在:
执行docker run -it --rm edeka3 /bin/shls -l /usr/src/app/routes,若offers.js不存在,说明COPY步骤出错;若存在,可执行cat /usr/src/app/routes/offers.js确认文件内容正常。
6. 检查package.json的启动命令
- 确认package.json中
scripts.start指向正确的入口文件,比如:
入口文件路径错误会导致相对路径引用失效。"scripts": { "start": "node app.js" }
内容的提问来源于stack exchange,提问作者juli_crafter
相关产品推荐
相关产品推荐

