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配置:问题仍存在
期望结果
应用能正常启动且无报错
解决方案
修复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"]清理旧镜像缓存并重新构建:
执行以下命令彻底清理旧构建缓存、容器及镜像,再重新启动服务:docker compose down --volumes --rmi all docker compose build --no-cache docker compose up可选:优化volumes配置(本地开发场景):
若需本地开发时挂载代码目录且不覆盖容器内依赖,可将volumes调整为:volumes: - .:/usr/src/app - /usr/src/app/node_modules无需本地挂载则直接删除volumes配置,避免干扰容器内依赖安装。
内容的提问来源于stack exchange,提问作者Hin
相关产品推荐
相关产品推荐

