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

Docker部署Node.js应用遇Cannot find module 'express'错误求助

Node.js Docker容器启动报错:Cannot find module 'express'

报错信息

recipeapp-server-1  | Error: Cannot find module 'express'
recipeapp-server-1  | Require stack:
recipeapp-server-1  | - /usr/src/app/index.js
recipeapp-server-1  |     at Module._resolveFilename (node:internal/modules/cjs/loader:1142:15)
recipeapp-server-1  |     at Module._load (node:internal/modules/cjs/loader:983:27)
recipeapp-server-1  |     at Module.require (node:internal/modules/cjs/loader:1230:19)
recipeapp-server-1  |     at require (node:internal/modules/helpers:179:18)
recipeapp-server-1  |     at Object.<anonymous> (/usr/src/app/index.js:1:17)
recipeapp-server-1  |     at Module._compile (node:internal/modules/cjs/loader:1368:14)
recipeapp-server-1  |     at Module._extensions..js (node:internal/modules/cjs/loader:1426:10)
recipeapp-server-1  |     at Module.load (node:internal/modules/cjs/loader:1205:32)
recipeapp-server-1  |     at Module._load (node:internal/modules/cjs/loader:1021:12)
recipeapp-server-1  |     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:142:12) {
recipeapp-server-1  |   code: 'MODULE_NOT_FOUND',
recipeapp-server-1  |   requireStack: [ '/usr/src/app/index.js' ]
recipeapp-server-1  | }

相关配置文件

Dockerfile

FROM node

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

RUN num install express

COPY . .

EXPOSE 3000

CMD ["node", "index.js"]

注:添加或移除RUN npm install express结果一致

docker-compose.yml

version: '3.9'

services:
  server:
    volumes:
      - /usr/src/app/node_modules
    build: .
    ports:
      - '3001:3000'
  db:
    image: 'postgres'
    ports:
      - '4444:5432'
    environment:
      POSTGRES_USER: 'postgres'
      POSTGRES_PASSWORD: 'root'

注:添加或移除volumes结果一致

package.json

{
  "name": "recipeapp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.3",
    "pg": "^8.11.3"
  }
}

已尝试的解决方法及结果

  • 在Dockerfile中添加/移除RUN npm install express,并在docker-compose.yml中添加/移除volume:均无效
  • 移除package-lock.json:问题仍存在
  • 在server服务下添加node_process: container_name: container_node restart: unless-stopped并修改volumes配置:出现新错误validating C:\Path\RecipeApp\docker-compose.yml: services.server Additional property node_process is not allowed
  • 修改Dockerfile中的WORKDIR和COPY指令,同时修改docker-compose.yml的volumes配置:问题仍存在

期望结果

应用能正常启动且无报错

解决方案

  1. 修复Dockerfile拼写错误:
    当前Dockerfile里的RUN num install express是拼写错误,应为RUN npm install express。不过由于package.json已包含express依赖,这一行可直接删除,仅保留RUN npm install即可安装所有依赖。修改后的Dockerfile如下:

    FROM node
    
    WORKDIR /usr/src/app
    
    COPY package*.json ./
    
    RUN npm install
    
    COPY . .
    
    EXPOSE 3000
    
    CMD ["node", "index.js"]
    
  2. 清理旧镜像缓存并重新构建:
    执行以下命令彻底清理旧构建缓存、容器及镜像,再重新启动服务:

    docker compose down --volumes --rmi all
    docker compose build --no-cache
    docker compose up
    
  3. 可选:优化volumes配置(本地开发场景):
    若需本地开发时挂载代码目录且不覆盖容器内依赖,可将volumes调整为:

    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    

    无需本地挂载则直接删除volumes配置,避免干扰容器内依赖安装。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:20:37