使用具有实时重新连接的Docker开发NodeJS应用程序

时间:2016-02-29 02:48:10

标签: node.js docker webpack-dev-server

我正在开发使用$('.myRedClass').addClass('redClass-margin'); 服务器的NodeJS应用程序。webpack服务器配置为处理自动文件重新加载。我希望将其作为挂载,这样每次更改代码时都无需重建映像。我希望Webpack文件夹在图像中可用,这样我每次启动容器时都不必获取模块。

实际上,源代码和node_modules应该处于同一层次结构级别。但问题是当我执行源代码的卷装载时,node_modules(因为它是图像的一部分)将会丢失,因为将使用卷装入路径。 有什么方法可以让这件事有效吗?

1 个答案:

答案 0 :(得分:1)

我很清楚这个问题!

当您挂载卷时,它会删除容器内安装的目录中的文件(从技术上讲,它不会删除它们,但出于我们的目的,它会删除它们)。这是因为文件是BUILD的一部分而不是RUN的一部分。

有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语法。