找不到在docker compose环境中运行的节点js app的模块

jem*_*thi 11 node.js npm docker docker-compose

我很抱歉我的新手问题,但是我正在度过这个错误的可怕日子,我有一个Express应用程序,我试图在docker compose中运行它.我用过这个Dockerfile:

FROM mhart/alpine-node
RUN mkdir -p /usr/src/app
RUN chmod -R 777 /usr/src/app
WORKDIR /usr/src/app
RUN npm install node-gyp -g
RUN npm install nodemon -g
ENV NODE_ENV development
EXPOSE 3000
Run Code Online (Sandbox Code Playgroud)

这部分我的docker-compose文件:

backend:
    mem_limit: 100m
    build:
      context: .
      dockerfile: dockerfiles/node/Dockerfile
    command: npm start
    depends_on:
      - mongo
      - elasticsearch
    volumes:
      - ./backend/:/usr/src/app
    ports:
      - 3000:3000
    links:
      - "mongo:mongo"
      - "elasticsearch:elasticsearch"
Run Code Online (Sandbox Code Playgroud)

当我做docker-compose时,我收到这个错误:

backend_1        | npm info it worked if it ends with ok
backend_1        | npm info using npm@3.10.10
backend_1        | npm info using node@v6.9.5
backend_1        | npm info lifecycle service-designer@1.0.0~prestart: service-designer@1.0.0
backend_1        | npm info lifecycle service-designer@1.0.0~start: service-designer@1.0.0
backend_1        | 
backend_1        | > service-designer@1.0.0 start /usr/src/app
backend_1        | > nodemon index.js
backend_1        | 
backend_1        | [nodemon] 1.11.0
backend_1        | [nodemon] to restart at any time, enter `rs`
backend_1        | [nodemon] watching: *.*
backend_1        | [nodemon] starting `node index.js`
backend_1        | module.js:471
backend_1        |     throw err;
backend_1        |     ^
backend_1        | 
backend_1        | Error: Cannot find module 'dotenv'
backend_1        |     at Function.Module._resolveFilename (module.js:469:15)
backend_1        |     at Function.Module._load (module.js:417:25)
backend_1        |     at Module.require (module.js:497:17)
backend_1        |     at require (internal/module.js:20:19)
backend_1        |     at Object.<anonymous> (/usr/src/app/index.js:1:63)
backend_1        |     at Module._compile (module.js:570:32)
backend_1        |     at Object.Module._extensions..js (module.js:579:10)
backend_1        |     at Module.load (module.js:487:32)
backend_1        |     at tryModuleLoad (module.js:446:12)
backend_1        |     at Function.Module._load (module.js:438:3)
backend_1        | [nodemon] app crashed - waiting for file changes before starting...
Run Code Online (Sandbox Code Playgroud)

如果我ls -al后端容器中,我会得到我的后端应用程序文件夹内容的完整列表,但听起来似乎无法识别node_modules依赖项.

Cha*_*own 17

您需要在容器中安装依赖项,Dockerfile中缺少该依赖项.

常见的方法是创建一个已经知道您的应用程序的Dockerfile,并使其复制您的package.json文件并执行npm install.

这允许容器在以后运行应用程序时查找所有代码依赖项.

请参见以下示例:https: //nodejs.org/en/docs/guides/nodejs-docker-webapp/

样本Dockerfile:

FROM node:boron

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install

# Bundle app source
COPY . /usr/src/app

EXPOSE 8080
CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)

当然,您可能需要调整COPY命令的路径.

  • 我遵循了同样的指南,但我仍然遇到同样的问题 (7认同)
  • 实际上,我的 WORKDIR 包含我所有的项目文件,但是在启动应用程序时,它无法从 node_modules 文件夹中获取依赖项!!! (3认同)

Nis*_*nth 16

我在运行时也遇到了同样的问题docker-compose up

通过运行docker-compose up --build而不是docker-compose up.

  • 正是我的问题,因为 docker-compose up 从未重新运行 npm install 命令,因此未安装新软件包。 (2认同)

M3R*_*3RS 8

如果您的Dockerfilepackage.json文件正确但仍然存在问题:

1)确保已重建容器映像。

2)尝试

docker-compose down -v

在再次启动容器之前docker-compose up

这将删除所有卷。

  • 这让我多次陷入困境。 (2认同)

小智 7

添加npm install到 Dockerfile 后,将 node_modules 添加到卷

volumes:
      - ./backend/:/usr/src/app
      - /usr/src/app/node_modules
Run Code Online (Sandbox Code Playgroud)

  • 好的解决方案!!!有时你本地的node_modules已经过时了,可以用它来覆盖原来的本地node_modules (2认同)

归档时间:

查看次数:

28435 次

最近记录:

5 年,9 月 前