您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

在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/cache
WORKDIR /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/app
WORKDIR /usr/src/app

最后但并非最不重要的entrypoint.sh

#!/bin/bash

cp -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安装在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-compose stop以停止容器并使用docker-compose up --build--build必需)再次将其重新启动。

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

希望这可以帮助。

Node 2022/1/1 18:24:26 有433人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶