Node.js 是否可以忽略docker容器中已装入卷中的子文件夹(例如节点\模块)?

Node.js 是否可以忽略docker容器中已装入卷中的子文件夹(例如节点\模块)?,node.js,docker,Node.js,Docker,我现在正在从事一个nodejs项目。node_modules文件夹中的小文件太多。我想移动一个基于docker的开发环境,这样node_modules文件夹就可以保存在docker映像中(必要时更新)。同时,我需要应用程序的源文件夹保留在托管环境中。以下是Docker文件,我希望能够工作: FROM node MAINTAINER MrCoder // To simplify the process node_modules is installed and cached ADD packag

我现在正在从事一个nodejs项目。node_modules文件夹中的小文件太多。我想移动一个基于docker的开发环境,这样node_modules文件夹就可以保存在docker映像中(必要时更新)。同时,我需要应用程序的源文件夹保留在托管环境中。以下是Docker文件,我希望能够工作:

FROM node
MAINTAINER MrCoder

// To simplify the process node_modules is installed and cached
ADD package.json /opt/app/
WORKDIR /opt/app
RUN npm install

// will be mapped to the local app source folder
VOLUME /opt/app

// This is to test whether local node_modules or the folder in the image is used
CMD ls node_modules

显然,当我更改“添加本地节点模块”文件夹中的任何文件时,它会被列出。

否,在装入卷时不能跳过某些文件。这是一个通用的Linux(以及我所知道的所有其他系统)限制,与Docker无关


但是,解决这个问题非常容易:有一个根级别
index.js
(或其他任何东西),它只执行
require('./src')。然后让容器提供
/opt/app
,并将
/opt/app/src
装入外部卷。

您可以使用绑定装入,即

mkdir -p /node_modules
mount --bind /node_modules /usr/src/app/node_modules

在卷声明之后但在npm安装之前。

您知道.dockrignore吗?我不建议使用挂载的node_模块,因为许多节点模块都是专门在您所在的平台上编译的。如果你试图重用来自两个不同平台的编译模块,你会得到很多二进制兼容性错误。您好@AbdullahJibaly,很好。我对Dockerfile做了一些更改,将其安装在映像中,而不是从主机添加。这看起来不正确。你能解释一下你的工作流程是什么,你想完成什么吗?我假设这主要是围绕开发工作流程进行的,对吗?您的开发环境是什么样子的?