Docker Node.js错误:找不到模块

62次阅读
没有评论

问题描述

在使用Docker和Node.js时遇到了一个问题。当他使用sudo docker-compose up命令启动一个包含Node.js的测试应用程序时,出现了以下错误:

Starting testapp_web_1 ... done
Attaching to testapp_web_1
web_1  | > testapp@0.0.1 start /usr/app
web_1  | > node index.js
web_1  | internal/modules/cjs/loader.js:613
web_1  |     throw err;
web_1  |     ^
web_1  | Error: Cannot find module 'mongodb'

他已经阅读了一些资料,包括一个相关的Stack Overflow主题,但是无论他尝试使用哪个模块(如mongodb、spdy等),都会出现这个错误。在本地不使用Docker时,测试应用程序是正常工作的。他希望能够找到在Docker中出现问题的原因并解决它。

解决方案

以下解决方案基于提供的问答数据和已知信息。

方案1:移除无用的卷挂载

docker-compose.yml文件中,你使用了一个卷挂载来映射/usr/app/node_modules路径。然而,这可能会覆盖Dockerfile构建阶段中安装的node_modules。在启动容器时,该挂载路径是空的,因此会出现找不到模块的错误。你可以尝试移除这个卷挂载,让node_modules目录保持Dockerfile构建时的状态。

version: '3'
services:
  web:
    build: .
    command: npm start
    ports:
      - 80:8080

方案2:重新构建镜像

如果你仍然遇到模块找不到的问题,可以尝试重新构建Docker镜像,确保在构建过程中正确安装了依赖。

Dockerfile

FROM node:12-alpine
WORKDIR /usr/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080

docker-compose.yml

version: '3'
services:
  web:
    build: .
    command: npm start
    ports:
      - 80:8080

构建镜像

在应用程序根目录下,打开终端并运行以下命令以构建镜像:

docker-compose build

启动容器

构建成功后,运行以下命令启动容器:

docker-compose up

这样,容器将在启动时正确安装所有依赖,包括mongodb模块。

方案3:检查应用代码

如果以上方法仍然无法解决问题,你可能需要仔细检查应用程序代码,确保没有其他因素导致模块找不到的错误。可能的原因包括路径问题、文件名错误或其他代码问题。

总结

通过移除无用的卷挂载或重新构建镜像,你有机会解决这个问题。如果问题仍然存在,建议检查应用程序代码以查找其他潜在问题。希望这些解决方案能帮助你成功在Docker中运行Node.js应用程序。

正文完