Node.js + Docker 撰写:node_modules 消失

Node.js + Docker Compose: node_modules disappears

我正在尝试使用 Docker Compose 将我的开发环境中的多个 Node.js 应用程序组合在一起。然而,我 运行 遇到了一个问题 node_modules

这是正在发生的事情:

  1. npm install 是 运行 作为 Dockerfile.
  2. 的一部分
  3. 我的本地目录中没有 node_modules。 (我不应该,因为依赖项的安装应该发生在容器中,对吧?否则似乎违背了目的,因为我需要在本地安装 Node.js。)
  4. docker-compose.yml 中,我正在使用源代码设置 volume
  5. docker-compose build 运行没问题。
  6. 当我 docker-compose up 时,node_modules 目录在容器中消失了 — 我假设是因为卷已挂载但我的本地目录中没有它。

如何确保 node_modules 一直存在?

Dockerfile

FROM       node:0.10.37

COPY       package.json /src/package.json

WORKDIR    /src

RUN        npm install -g grunt-cli && npm install

COPY       . /src

EXPOSE     9001

CMD        ["npm", "start"]

docker-compose.yml

api:
  build: .
  command: grunt
  links:
    - elasticsearch
  ports:
    - "9002:9002"
  volumes:
    - .:/src

elasticsearch:
  image: elasticsearch:1.5

由于the way Node.js loads modules,只需将node_modules放在源代码路径的较高位置即可。例如,将您的源代码放在 /app/src 中,将您的 package.json 放在 /app 中,因此 /app/node_modules 就是它们的安装位置。

我尝试了您的修复,但问题是大多数人 运行 npm 安装在 /usr/src/app 目录中,导致 node_modules 文件夹最终位于 /app 目录。结果,node_modules 文件夹最终出现在容器的 /usr/src/usr/src/app 目录中,您最终会遇到与开始时相同的问题。