Node.js+;Docker Compose:节点\u模块消失
我正在尝试使用Docker Compose在我的开发环境中整合许多Node.js应用程序。但是,我遇到了一个关于Node.js+;Docker Compose:节点\u模块消失,node.js,docker,docker-compose,Node.js,Docker,Docker Compose,我正在尝试使用Docker Compose在我的开发环境中整合许多Node.js应用程序。但是,我遇到了一个关于node\u模块的问题 下面是正在发生的事情: npm安装作为Dockerfile的一部分运行 我的本地目录中没有node\u模块。(我不应该这样做,因为依赖项的安装应该在容器中进行,对吗?否则,它似乎无法达到目的,因为我需要在本地安装Node.js。) 在docker compose.yml中,我正在用源代码设置一个卷 docker compose build运行良好 当Idocke
node\u模块的问题
下面是正在发生的事情:
npm安装
作为Dockerfile
的一部分运行
我的本地目录中没有node\u模块
。(我不应该这样做,因为依赖项的安装应该在容器中进行,对吗?否则,它似乎无法达到目的,因为我需要在本地安装Node.js。)
在docker compose.yml
中,我正在用源代码设置一个卷
docker compose build
运行良好
当Idocker compose up
时,node\u modules
目录在容器中消失-我假设是因为卷已装入,而我的本地目录中没有它
如何确保node\u模块
固定在周围
Dockerfile
docker compose.yml
因此,只需将节点_模块
放在源代码路径的更高位置。例如,把你的源代码放在/app/src
上,把你的包.json
放在/app
上,这样/app/node_模块就可以安装在/usr/src/app
目录下,导致节点\u modules
文件夹在/app
目录中结束。结果,node\u modules
文件夹同时出现在容器中的/usr/src
和/usr/src/app
目录中,最后出现的问题与开始时相同。是的,我也遇到了这个问题。我非常努力地将所有东西都保存在容器中(包括开发流程,比如构建工具),但我认为这在现实中是不可行的。我现在在我的主机上运行开发流程,所以我确实需要node\u模块
,这意味着正如您所说,它已同步到/app/src
。到目前为止,这不是一个问题,但我可以看到,如果在我的主机(OS X)上构建了与容器(Ubuntu)不兼容的东西,这就是一个问题。Justin的可能副本您是否发现了这一点,因为我似乎有一个非常类似的问题,我根本无法工作:-它在没有卷映射的情况下工作,但这并不好,因为每次更改任何内容时,我都必须构建,这太耗时了。@JosephMcDermott是我找到的最佳解决方案。
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"]
api:
build: .
command: grunt
links:
- elasticsearch
ports:
- "9002:9002"
volumes:
- .:/src
elasticsearch:
image: elasticsearch:1.5