希望我有一个简单的问题;我是 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?
最后,您是否会使用 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/