Docker 运行 填充数据库的周期进程的容器
Docker Container to run a period process which populates a database
使用 docker compose 我创建了一个带有 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
配置。希望对你有帮助。
使用 docker compose 我创建了一个带有 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
配置。希望对你有帮助。