正在将docker容器中的node_modules与主机同步



我想对我的react应用程序进行dockerize,对此我有一个问题。我想在容器上安装node_modules,然后将它们同步到主机,这样我就可以在容器而不是主机上运行npm命令。我实现了这一点,但同步到我的计算机的node_modules文件夹是空的,但已填充在容器中。这是一个问题,因为我在IDE中收到了未安装的警告,因为主机中的node_modules文件夹是空的。

docker-compose.yml:

version: '3.9'
services:
frontend:
build:
dockerfile: Dockerfile
context: ./frontend
volumes:
- /usr/src/app/node_modules
- ./frontend:/usr/src/app

Dockerfile:

FROM node:18-alpine3.15
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install && 
mkdir -p node_modules/.cache && 
chmod -R 777 node_modules/.cache
COPY ./ ./ 
CMD npm run start

如果有任何提示和/或帮助,我将不胜感激。

你不能真的"份额;node_module之所以如此,是因为在安装过程中会发生某些特定于操作系统的步骤。有些模块具有编译步骤,这些步骤需要以主机为目标。其他模块具有符号链接的bin声明,并且符号链接不能是"1";安装";或者在主机和容器之间共享。即使是不同版本的node也无法在不进行重建的情况下共享node_module。

如果你想在docker内部开发,你有两个选择:

  1. 使用VSCode在容器内编辑(也许其他编辑器也会这样做?(。我以前试过,它不是很有趣,也有点乏味——它不太符合你的要求
  2. 编辑主机上安装在docker中的文件。Nodemon/webpack/etc将看到更改并相应地进行重建

我推荐#2-我在很多公司都看到过它的使用,它是一个非常";标准";发展的方式。这确实需要在主机上安装npm——不要因为试图避免额外的npm安装而陷入困境。

如果你想更快地进行安装和构建,最好的办法是将npm缓存目录安装到docker容器中。您需要通过在主机和docker容器上同时运行npm get cache来查找npm缓存位置。你可以在你的码头集装箱上这样做:

docker run --rm -it <your_image> npm get cache

您可以像装载任何其他卷一样装载缓存文件夹。您可以在docker和您的主机上分别运行安装程序-文件只会下载一次,所有编译和符号链接都会正确进行。

最新更新