【问题标题】:The node_modules Volume Trick when building an angular app with docker使用 docker 构建 Angular 应用程序时的 node_modules 音量技巧
【发布时间】:2020-02-27 05:49:35
【问题描述】:

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

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

【问题讨论】:

    标签: node.js angular docker node-modules


    【解决方案1】:

    您的问题中提到的链接已经回答了您的问题。 由于我们要使用“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被覆盖。

    【讨论】:

    • 这是使用数据卷来存储所有 node_modules 的解决方法,因为在挂载工作目录之前,数据卷会从构建的 docker 映像中复制数据。
    猜你喜欢
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 2020-11-05
    相关资源
    最近更新 更多