linux - 在 Docker 容器中运行 Cron 作业

标签 linux docker cron docker-compose cron-task

希望我有一个简单的问题;我是 Docker 和 Linux 的新手。 大多数文章/stackoverflow 帖子建议在 docker 容器中安装 cron 以使其作为 can be seen at this link 工作。

但是,根据下面的图片,我们可以看出 Docker Engine 是 HOST OS 的系统和实用程序库与应用程序容器之间的抽象层。

为什么我们不重用主机附带的系统 cron,而是在容器内安装 cron?这几乎让人觉得多余。

我对 docker 的理解是你会在你的 nodejs 应用程序容器中安装应用程序级别的库和包,比如 npm 节点模块,但是如果你需要一个像 cron 这样的系统实用程序,那么你会以某种方式回调主机操作系统的 native cron 实用程序;那么为什么不以某种方式在我们的容器中使用 HOST 的 cron,为什么要在容器中重新安装 cron?

enter image description here

最后,您是否会使用 docker-compose 代替将 cron 服务分离到它自己的容器中 然后以某种方式让 cron 服务与应用程序容器对话并引用它的环境变量?

我的意思是应用容器中定义的环境变量;让cron 容器 可以访问它们? 这样我们就可以遵循每个容器一个服务的最佳实践

最佳答案

如果需要,可以在主机上使用 cron,例如

0 0 * * * /usr/local/bin/docker run image 

据我所知,现代容器应用程序使用来自主机(生态)系统的某种形式的调度。您可以在主机上使用 cron 来触发 docker run 命令。您可以使用像 Airflow 这样的通用调度程序。您可以使用功能齐全的容器平台,如 DC/OS,它带有内置的调度服务。

在容器本身 中将 cron 与您的应用程序一起运行没有任何问题。但是,如果您从应用程序容器外部的调度服务触发应用程序容器,您的容器将在作业完成后终止,从而将任何资源释放给其他应用程序。

其次,每个服务有一个容器被认为是一种很好的做法。 Cron 本身就是一项服务。

关于linux - 在 Docker 容器中运行 Cron 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51425326/

相关文章:

java - 为每个月的第一个工作日和第15个工作日上午 8 点创建一个 cron 表达式

c - 测量 Linux 中应用程序的运行时间

linux - 大多数 "vanila"linux 发行版

linux - 如何将 "which somemodule"的输出路径作为 "ls"的参数?

linux - shell脚本获取列数据

docker - 在 Raspberry Pi 3B+ 上运行 ASP .NET Core

docker - 跨容器重用配置

docker - 作为 alpine 容器中的非 root 用户的 Vault 开发模式初始化错误 :/dev/null/. Vault 不是目录

php - 升级运行 Upstart + PHP + SWF 事件脚本直到事件完成

python - Cron 作业语法