Docker Container运行周期过程以填充数据库

时间:2019-07-11 11:15:10

标签: docker cron docker-compose docker-swarm

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

1 个答案:

答案 0 :(得分:1)

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配置。希望对您有所帮助。