使用 Docker 和实时重新加载开发 NodeJS 应用程序



我正在开发一个使用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 语法。

相关内容

最新更新