Docker 容器,用于运行填充数据库的周期进程



使用 dockercompose,我创建了一个带有 Web 前端和 mongo 数据库后端的 docker 堆栈。我需要一个定期运行的进程,比如每小时运行一次,它通过执行node.js脚本来填充我的数据库。理想情况下,我想要一些可以作为 docker 容器运行的东西,这样我就可以简单地定义 node.js 脚本并将容器添加到我的 docker-compose.yml 文件中。我已经阅读了一些使用 cron 来自动执行简单任务的文章。这种方法是否也可以扩展以执行数据库的更新?

cron可以做到这一点。既然要运行Node.js脚本,为什么不在脚本本身中实现调度。例如,使用async

async function sleep(millis) {
return new Promise(resolve => setTimeout(resolve, millis));
}
async function updatedb() {
while(true)
console.log("updating database");
// ... update the database, await if necessary
// then sleep one hour
await sleep(60 * 60 * 1000);
}
}
updatedb();

将脚本设置为要在容器内运行的命令 (CMD)

CMD ["nodejs", "/path/to/updatedb.js"]

这样做的优点是将所有内容都放在一个地方,并避免了额外的crontab配置。希望对您有所帮助。

最新更新