首次使用Docker部署多容器项目,Node.js容器报模块未找到错误
Docker Node.js容器报MODULE_NOT_FOUND错误排查与修复
核心问题分析
你的Node.js容器找不到/app/customer/index.js,本质是Docker构建配置与docker-compose挂载配置的路径冲突,导致实际文件位置和预期不符:
- Dockerfile中先设置
WORKDIR /app,再COPY ./customer .,这会把本地customer目录下的所有文件复制到容器的/app目录(比如index.js在/app/index.js),之后切换到/app/customer——但这个目录并未创建,不存在于容器中。 - docker-compose配置了
./customer:/app挂载,会直接覆盖容器构建时/app目录的内容,容器内/app是本地customer的文件,但启动命令指向的/app/customer/index.js路径不存在。
修复方案
方案1:修正Dockerfile.nodejs(推荐)
调整工作目录和复制逻辑,让构建后的路径与启动命令匹配:
FROM node:18-alpine # 直接将工作目录设为/app/customer WORKDIR /app/customer # 复制本地customer目录下的文件到容器当前工作目录 COPY ./customer . RUN npm install EXPOSE 3000 CMD ["node", "index.js"]
同时修改docker-compose中node服务的挂载配置,确保路径匹配:
services: node: build: context: . dockerfile: Dockerfile.nodejs volumes: - ./customer:/app/customer # 挂载到正确的工作目录 - /app/customer/node_modules # 匿名卷避免覆盖node_modules - shared-package:/usr/src/app/shared # 其余配置不变
方案2:调整启动命令与挂载路径(快速修复)
若不想修改Dockerfile,直接调整docker-compose配置:
services: node: build: context: . dockerfile: Dockerfile.nodejs volumes: - ./customer:/app - /app/node_modules # 修正匿名卷路径为/app/node_modules - shared-package:/usr/src/app/shared command: ["node", "/app/index.js"] # 指定正确的文件路径 # 其余配置不变
额外注意事项
- 确认本地
customer目录下确实存在index.js文件。 - 修改配置后,重新构建镜像并启动容器:
docker-compose down docker-compose build node docker-compose up -d
内容的提问来源于stack exchange,提问作者Rithik Tank
相关产品推荐
相关产品推荐

