是否可以忽略docker容器中已安装的Volume中的子文件夹(例如node_module)?

时间:2015-06-07 11:57:41

标签: 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 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

显然,当我更改添加本地node_modules文件夹中的任何文件时,它会被列出。

2 个答案:

答案 0 :(得分:0)

不,安装卷时无法跳过某些文件。这是一个普通的Linux(以及我所知道的所有其他系统)的限制,而不是与Docker相关的。

但是,解决它很容易:拥有除index.js之外什么都不做的根级require('./src');(或其他)。然后由容器提供/opt/app并将/opt/app/src作为外部卷装载。

答案 1 :(得分:-1)

你可能会使用绑定装载,即

mkdir -p /node_modules
mount --bind /node_modules /usr/src/app/node_modules
在卷声明之后但在npm安装之前