我被困住了,需要帮助。我在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中定义的命令。
感谢您的帮助
答案 0 :(得分:2)
通常使用docker我会看到3个选项:
要在同一容器中运行cron,您可以查看https://github.com/phusion/baseimage-docker
或者您可以创建一个单独的容器,其中唯一正在运行的进程是cron守护程序。我没有方便的链接,但他们是我们的。然后使用cron调用连接到其他容器并调用要运行的内容。使用一个非常容易的apache容器,只需暴露一些最小的http API端点,它可以在你调用它时做你想做的事情(确保它不容易受到任何注入,即不要传递任何参数,保持简单愚蠢)。
如果您也控制了主机,那么您可以(ab)使用在那里运行的cron守护程序(我目前使用我的容器执行此操作)。我不知道docker cloud,但有些东西告诉我这可能不是你的选择。