在docker云容器中运行cronjob或任务

时间:2017-02-09 15:07:24

标签: docker cron scheduled-tasks docker-cloud

我被困住了,需要帮助。我在docker cloud上设置了多个堆栈。堆栈正在运行多个容器,如数据,mysql,web,elasticsearch等。

现在我需要在Web容器上运行命令。在码头之前,我用cronjob做了这个,例如:

*/10 * * * * php /var/www/public/index.php run my job

但我的网站Dockerfile以

结尾
CMD ["apache2-foreground"]

据我所知,在一个容器上运行两个命令的docker概念是不好的做法。但是我如何安排像上面一个cronjob那样的工作呢?

我是否应该在CMD中启动cron,类似于什么?

CMD ["cron", "apache2-foreground"] ( should exit with 0 before apache starts)

我应该创建一个运行这两个命令的启动脚本吗?

在我看来,最聪明的解决方案是创建另一个服务,例如dockercloud haproxy one,其他服务是链接的。

然后cron服务将执行在链接容器/堆栈的Stackfile中定义的命令。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

通常使用docker我会看到3个选项:

  • 在同一个容器中运行您的cron进程
  • 在不同的容器中运行您的cron进程
  • 在主机上运行cron,在docker之外

要在同一容器中运行cron,您可以查看https://github.com/phusion/baseimage-docker

或者您可以创建一个单独的容器,其中唯一正在运行的进程是cron守护程序。我没有方便的链接,但他们是我们的。然后使用cron调用连接到其他容器并调用要运行的内容。使用一个非常容易的apache容器,只需暴露一些最小的http API端点,它可以在你调用它时做你想做的事情(确保它不容易受到任何注入,即不要传递任何参数,保持简单愚蠢)。

如果您也控制了主机,那么您可以(ab)使用在那里运行的cron守护程序(我目前使用我的容器执行此操作)。我不知道docker cloud,但有些东西告诉我这可能不是你的选择。