使用Docker构建有角度的应用程序时,使用node_modules Volume Trick

时间:2019-10-31 20:17:39

标签: node.js angular docker node-modules

我尝试使用Docker并将其与有角度的应用程序一起使用。我按照以下步骤操作:https://mherman.org/blog/dockerizing-an-angular-app/

但是我不理解node_modules的窍门。我知道我们需要使用以下参数-v ${PWD}:/app运行docker来绑定容器中的主机文件。但是我没有得到带有参数-v /app/node_modules的零件。如果主机绑定隐藏了Docker,Docker如何使用容器中的/app/node_modules副本创建卷?

1 个答案:

答案 0 :(得分:0)

您问题中提到的链接已经回答了您的问题。 由于我们要使用“ node_modules”文件夹的容器版本,因此我们配置了另一个卷:-v /app/node_modules。现在,您应该可以删除本地node_modules口味了。

简单地说,您想使用主机上的所有内容,而不是node_modules的完整代码。因此,您只映射了主机的空目录,因此此技巧将使您的容器能够使用容器node_modules而不是主机node_modules

有很多因素,某些node_modules依赖于主机,例如x509,因此如果您的主机操作系统是窗口,则它在Linux容器中将无法工作。

第一个技巧,是在Docker构建时安装模块

COPY package.json /app/package.json
RUN npm install
在容器运行期间

docker run --name test -it -v ${PWD}:/app -v /app/node_modules -p 4201:4200 --rm test-app

运行容器后,如果删除主机node_modules,则容器仍将继续工作,就像使用容器node_modules一样。

简单地说,删除主机node_modules并运行

docker run --name test -it -v ${PWD}:/app  -p 4201:4200 --rm test-app

它将无法运行,因为容器/app会被主机覆盖目录。

工作环境很简单,是您错过的窍门。

docker run --name test -it -v ${PWD}:/app -v /app/node_modules -p 4201:4200 --rm test-app

这将防止容器的node_modules被覆盖。