栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Docker容器中安装node_modules并将其与主机同步

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Docker容器中安装node_modules并将其与主机同步

首先,我要感谢David Maze和trust512发布他们的答案。不幸的是,他们没有帮助我解决我的问题。

我想发表我对这个问题的答案。

我的

docker-compose.yml

---# Define Docker Compose version.version: "3"# Define all the containers.services:  # Frontend Container.  frontend:    build: ./app/frontend    volumes:      - ./app/frontend:/usr/src/app    ports:     - 3000:3000    environment:      NODE_ENV: development    command: /usr/src/app/entrypoint.sh

我的

Dockerfile

# Set the base image.FROM node:10# Create and define the node_modules's cache directory.RUN mkdir /usr/src/cacheWORKDIR /usr/src/cache# Install the application's dependencies into the node_modules's cache directory.COPY package.json ./COPY package-lock.json ./RUN npm install# Create and define the application's working directory.RUN mkdir /usr/src/appWORKDIR /usr/src/app

最后但并非最不重要的

entrypoint.sh

#!/bin/bashcp -r /usr/src/cache/node_modules/. /usr/src/app/node_modules/exec npm start

这里最棘手的部分是将安装程序安装

node_modules
到我们的中定义
node_module
的缓存目录(
/usr/src/cache
)中
Dockerfile
。之后,
entrypoint.sh
将将其
node_modules
从缓存目录(
/usr/src/cache
)移至我们的应用程序目录(
/usr/src/app
)。由于这个原因,整个
node_modules
目录将出现在我们的主机上。

看着上面的问题,我想要:

  • node_modules
    自动安装而不是手动安装
  • 安装
    node_modules
    在Docker容器而不是主机中
  • 已经
    node_modules
    与主机(同步,如果我安装多克尔容器内的一些新的包装,应自动与主机无需任何手动操作同步

第一件事完成了:

node_modules
自动安装。第二件事也完成了:
node_modules
安装在Docker容器中(因此,不会出现跨平台问题)。第三件事也完成了:
node_modules
安装在Docker容器中的主机将在我们的主机上
可见 并且将被 同步 !如果我们在Docker容器中安装了一些新软件包,它将立即与我们的主机同步。

需要注意的重要一点:确实,安装在Docker容器中的新软件包将出现在中

/usr/src/app/node_modules
。由于此目录与我们的主机同步,因此这个新软件包也将出现在我们主机的
node_modules
目录中。但是,此时
/usr/src/cache/node_modules
将具有旧版本(没有此新软件包)。无论如何,这对我们来说不是问题。在下一个
docker-compose up--build
--build
必需)期间,Docker将重新安装
node_modules
(因为
package.json
已更改),并且
entrypoint.sh
文件会将它们移至我们的
/usr/src/app/node_modules

您应该考虑另一件事。如果您

git pull
从远程存储库中获取代码,或者
git checkout your-teammate-branch
在运行Docker时,可能会将一些新软件包添加到
package.json
文件中。在这种情况下,您应该使用停止Docker,
CTRL +C
然后使用
docker-compose up--build
--build
必需)再次将其重新启动。如果您的容器作为守护程序运行,则应执行
docker-composestop
以停止容器并使用
docker-compose up --build
--build
必需)再次将其重新启动。

如有任何疑问,请在评论中让我知道。

希望这可以帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367729.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号