【问题标题】:Running Cron jobs inside Docker containers在 Docker 容器中运行 Cron 作业
【发布时间】:2018-12-27 17:59:30
【问题描述】:

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

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

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

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

最后,你会用 docker-compose 代替separate out the cron service into its own container 然后让 cron 服务与应用程序容器对话并引用它的环境变量吗?

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

【问题讨论】:

标签: linux docker cron docker-compose cron-task


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 谢谢汤姆,你的意思是在容器中运行 cron 本身没有任何问题,尽管这意味着你经常会有运行但空闲的容器?最后,每个服务一个容器,你的意思是,将我的应用程序与 cron 部分分离? cron 容器是否知道要与应用程序容器通信,因为 cron 会监视一些关键的 perl 服务在我们的应用程序容器中启动,如果它们不启动,cron 会启动它们,那么它将如何从单独的应用程序服务启动这些应用程序服务?容器,即在应用容器之外?
  • 我的问题的根源是,为什么我们要在容器中重新安装 cron,为什么我们不能重新使用 linux HOST 预构建的 cron? reunse 我的意思是,从容器内部,有没有办法回调主机的本地 cron,这样我们就不需要在容器内安装 cron
  • 已更新,希望能更好地回答您的问题。
  • 您说的是会发生什么,但没有解释原因。我想对这个主题有更深入的了解。您能否举例说明为什么容器会在作业完成后终止?
  • 当然。你想用 cron 触发什么样的周期性作业?
猜你喜欢
  • 2016-08-29
  • 2016-09-24
  • 1970-01-01
相关资源
最近更新 更多