我有两个 docker 容器,一个用于运行我的 Node 服务器,另一个用于运行 mongo。
我想做的是,当我安装 mongo 镜像时,我需要它使用 node.js 用我拥有的脚本填充 mongo。
使用 mongo 和 node.js 的单独容器来执行此操作的最佳方法是什么?
目前我的想法是,当我创建 mongo 容器时,我安装 Node 并作为 RUN
命令运行我的填充脚本。
有更好的方法吗?
最佳答案
如果您的 Node.js 应用程序中有一个批处理作业,您可以使用包含该应用程序的镜像启动另一个容器,只需将不同的可执行文件传递给 docker run
命令。
这是一个例子。如果您有这两张图片:
-
yourcorp/node-app
-
yourcorp/mongo
启动您的 mongo 容器:docker run -d -P yourcorp/mongo
在容器中运行批处理作业,该容器将运行脚本然后退出。例如:
docker run -e "MONGO_DB=host:port/database" yourcorp/node-app node tasks/seed-database.js
。 tasks/seed-database.js
只是您编写的与应用程序一起存在的脚本,但可以独立于服务器运行,仍然可以 require
应用程序的其他部分,并在网络请求之外执行操作(为数据库播种)。
设置数据库后启动 Node.js 服务器:
docker run -d -P -e "MONGO_DB=host:port/database" yourcorp/node-app supervisor app.js
按照您想要的方式设置公开的端口和环境变量取决于您。如果您提供更多详细信息,我们可以提供更好的示例。
关于node.js - Docker为node、mongo分离容器,如何从node容器填充mongo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33547564/