我正在开发一个使用webpack
服务器的NodeJS应用程序。Webpack
服务器配置为负责自动文件重新加载。我希望将其挂载为卷,这样就不需要在每次更改代码时重建映像。我希望 node_modules
文件夹在映像中可用,这样我就不必在每次启动容器时获取模块。
实际上,源代码和node_modules
应该处于同一层次结构级别。但问题是,当我对源代码进行卷挂载时,node_modules
(因为它是映像的一部分)将丢失,因为将使用卷挂载路径。有什么方法可以让这个东西工作吗?
我很了解这个问题!
当您挂载卷时,它会删除容器内挂载的目录中的文件(嗯,从技术上讲,它不会删除它们,但出于我们的目的,它会删除它们)。这是因为文件是构建的一部分,而不是运行的一部分。
有 3 个修复:
1 - 不要在构建时执行npm install
,而是在运行时执行 - 例如,当您执行 docker run
命令时。运行时在挂载目录内创建的容器文件将从主机获得。
ENTRYPOINT npm install (something like that)
2 - 在构建过程中将文件复制到其他位置(例如/temp/node_modules),然后在运行时将它们复制回去
ENTRYPOINT scriptToCopyFilesBackIntoNodeModules.sh
如果需要从主机进行访问,则应使用前两个中的任何一个。如果您需要从另一个容器访问,请使用volumes_from
- 这只需无需上述任何解决方法即可工作。
container1:
volumes: /node_modules
container2:
volumes_from: container1
它是这样的 - 上面的语法是 docker-compose 语法。