【问题标题】:How to sync node_modules form inside Docker container to outside node_modules folder?如何将 Docker 容器内的 node_modules 表单同步到 node_modules 文件夹外?
【发布时间】:2021-02-13 14:57:19
【问题描述】:

有没有办法将容器内的节点模块形式映射到外部?

我想将它们安装在容器内(这样我可以跨平台保持一致性),但我想在它们更改到容器外的 node_modules 文件夹时复制它们。

有没有简单的方法来做到这一点?

我目前有 docker compose 版本 3。 谢谢

我的 Dockerfile(在前端文件夹中):

FROM 
RUN mkdir /frontend
WORKDIR /frontend

COPY . .
RUN npm install -g @angular/cli && npm install
EXPOSE 4200
CMD ['ng','serve','--host','0.0.0.0']

我的 docker-compose.yml

version '3'
services:
 frontend:
  build:
   context: ./frontend
   dockerfile: Dockerfile
  ports:
   - '4200:4200'
  container_name : frontend
  volumes:
   - ./frontend:/frontend
   - /frontend/node_modules




【问题讨论】:

  • node_modules 树本身不一定在主机操作系统之间保持一致,因此在 MacOS 主机上使用 Linux 容器 node_modules 可能无法正常工作。另一方面,我认为只要运行npm install 在任何地方都可以始终如一地运行;我可能不会将 Docker 带入其中。
  • true 在整个操作系统中并不一致,但是由于您使用容器操作系统来构建它们,所以它将是……这是使用 docker 的原因之一……
  • 那么为什么node_modules 树需要在主机上呢?您可以删除volumes: 块以使用容器中内置的代码。
  • 我需要它来让 vs 代码停止突出显示每个模块导入:/ 红色就像找不到它们一样

标签: angular docker node-modules


【解决方案1】:

我认为最好有一个基础镜像,并且你的 node_modules 应该在那里,并且在你的主镜像中你应该从基础镜像中使用。

例如,您可以拥有这样的基本图像:

FROM node:14-alpine
WORKDIR /app
COPY ./package.json .
RUN npm install

然后执行这个命令

docker build -t base-image .

then use it like this 

FROM base-image as webapp 运行 mkdir -p /app 工作目录 /app 复制 package.json /app 运行 npm 安装 复制 。 /应用程序 ...

【讨论】:

  • 但是我在开发时无法安装新模块。
  • 您可以编写一个批处理脚本,先运行基础镜像,然后运行主镜像。如果您的 package.json 文件已更改基本映像,请重新运行 npm install
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
相关资源
最近更新 更多