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

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/sh
    
    执行ls -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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:07:20