Node.js + Docker 撰写:node_modules 消失
Node.js + Docker Compose: node_modules disappears
我正在尝试使用 Docker Compose 将我的开发环境中的多个 Node.js 应用程序组合在一起。然而,我 运行 遇到了一个问题 node_modules
。
这是正在发生的事情:
npm install
是 运行 作为 Dockerfile
. 的一部分
- 我的本地目录中没有
node_modules
。 (我不应该,因为依赖项的安装应该发生在容器中,对吧?否则似乎违背了目的,因为我需要在本地安装 Node.js。)
- 在
docker-compose.yml
中,我正在使用源代码设置 volume
。
docker-compose build
运行没问题。
- 当我
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
目录中,您最终会遇到与开始时相同的问题。
我正在尝试使用 Docker Compose 将我的开发环境中的多个 Node.js 应用程序组合在一起。然而,我 运行 遇到了一个问题 node_modules
。
这是正在发生的事情:
npm install
是 运行 作为Dockerfile
. 的一部分
- 我的本地目录中没有
node_modules
。 (我不应该,因为依赖项的安装应该发生在容器中,对吧?否则似乎违背了目的,因为我需要在本地安装 Node.js。) - 在
docker-compose.yml
中,我正在使用源代码设置volume
。 docker-compose build
运行没问题。- 当我
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
目录中,您最终会遇到与开始时相同的问题。