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

我被卡住了,需要帮助。 我已经在Docker云上设置了多个堆栈。 堆栈运行多个容器,如数据,mysql,web,elasticsearch等。

现在我需要在Web容器上运行命令。 在docker之前,我用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) 

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

在我看来,最聪明的解决scheme是创build另一个服务,如dockercloud haproxy之一,其他服务链接。

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

谢谢你的帮助

通常我会看到3个选项:

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

为了在同一个容器中运行cron,你可以看看https://github.com/phusion/baseimage-docker

或者你可以创build一个单独的容器,里面唯一的运行进程就是cron守护进程。 我没有这方面的链接,但他们是我们在那里。 然后,您使用cron调用来连接到其他容器并调用您想要运行的内容。 使用一个应该足够简单的apache容器,只需要公开一些最小的http API端点,它会在调用时做你想做的事情(确保它不容易被任何注入,即不传递任何参数,保持简单的愚蠢) 。

如果你有主机的控制权,那么你可以(ab)使用运行在那里的cron守护进程(我现在用我的容器来做这个)。 我不知道docker云,但有些东西告诉我,这可能不适合你。