您的问题中提到的链接已经回答了您的问题。
由于我们要使用“node_modules”文件夹的容器版本,我们配置了另一个卷:-v /app/node_modules。您现在应该可以删除本地 node_modules 风味了。
简单来说,您想使用主机中的所有内容,完整的代码,而不是node_modules。所以你只是映射了主机的一个空目录,所以这个技巧可以让你的容器使用容器node_modules而不是主机node_modules。
有很多因素,一些 node_modules 像 x509 一样依赖于主机,所以如果你的主机操作系统是窗口,它不会在 Linux 容器中工作。
第一个技巧,在 docker build time 中安装模块
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被覆盖。