加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Docker容器中安装node_modules并将它们与host同步

发布时间:2020-12-16 03:29:25 所属栏目:安全 来源:网络整理
导读:我遇到了在Docker容器中安装node_modules并将它们与主机同步的问题.我的Docker的版本是18.03.1-ce,构建9ee9f40,Docker Compose的版本是1.21.2,构建一个133471. 我的docker-compose.yml看起来像: # Frontend Container.frontend: build: ./app/frontend volu

我遇到了在Docker容器中安装node_modules并将它们与主机同步的问题.我的Docker的版本是18.03.1-ce,构建9ee9f40,Docker Compose的版本是1.21.2,构建一个133471.

我的docker-compose.yml看起来像:

# Frontend Container.
frontend:
  build: ./app/frontend
  volumes:
    - ./app/frontend:/usr/src/app
    - frontend-node-modules:/usr/src/app/node_modules
  ports:
    - 3000:3000
  environment:
    NODE_ENV: ${ENV}
  command: npm start

# Define all the external volumes.
volumes:
  frontend-node-modules: ~

我的Dockerfile:

# Set the base image.
FROM node:10

# Create and define the working directory.
RUN mkdir /usr/src/app
WORKDIR /usr/src/app

# Install the application's dependencies.
COPY package.json ./
COPY package-lock.json ./
RUN npm install

许多博客文章和Stack Overflow答案都描述了外部卷的技巧.例如,this one.

该应用程序运行良好.源代码是同步的.热重装也很有效.

我唯一的问题是node_modules文件夹在主机上是空的.是否可以将Docker容器内的node_modules文件夹与主机同步?

我已经读过这些答案:

> docker-compose volume on node_modules but is empty
> Accessing node_modules after npm install inside Docker

不幸的是,他们并没有帮助我很多.我不喜欢the first one,因为我不想在我的主机上运行npm install,因为可能存在跨平台问题(例如主机是Windows或Mac,Docker容器是Debian 8或Ubuntu 16.04). The second one对我也不好,因为我想在我的Dockerfile中运行npm install,而不是在Docker容器启动后运行它.

另外,我找到了this blog post.作者试图解决我面临的同样问题.问题是node_modules不会被同步,因为我们只是将它们从Docker容器复制到主机.

我希望Docker容器中的node_modules与主机同步.请考虑我想要:

>自动安装node_modules而不是手动安装
>在Docker容器中安装node_modules而不是主机
>让node_modules与主机同步(如果我在Docker容器中安装了一些新软件包,它应该自动与主机同步,无需任何手动操作)

我需要在主机上安装node_modules,因为:

>在需要时阅读源代码的可能性
> IDE需要在本地安装node_modules,以便它可以访问devDependencies,例如eslint或prettier.我不想全局安装这些devDependencies.

提前致谢.

这里有三件事:

>当你运行docker build或docker-compose build时,你的Dockerfile会构建一个包含/usr/src / app / node_modules目录和Node安装的新映像,但没有别的.特别是,您的应用程序不在构建的映像中.
>当您使用docker-compose时,卷:[‘./ app / fold:/usr/src / app’]指令会隐藏/usr/src / app中的所有内容,并在其上安装主机系统内容.
>然后卷:[‘frontend-node-modules:/usr/src / app / node_modules’]指令将命名卷挂载到node_modules树之上,隐藏相应的主机系统目录.

如果您要启动另一个容器并将命名卷附加到它,我希望您在那里看到node_modules树.对于您所描述的内容,您只需要不需要命名卷:从dock:block和docker-compose.yml文件末尾的volumes:部分删除第二行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读