我尝试使用Docker并将其与有角度的应用程序一起使用。我按照以下步骤操作:https://mherman.org/blog/dockerizing-an-angular-app/
但是我不理解node_modules的窍门。我知道我们需要使用以下参数-v ${PWD}:/app
运行docker来绑定容器中的主机文件。但是我没有得到带有参数-v /app/node_modules
的零件。如果主机绑定隐藏了Docker,Docker如何使用容器中的/app/node_modules
副本创建卷?
答案 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
被覆盖。