在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云,但有些东西告诉我,这可能不适合你。
- 调用从quickstart.cloudera / 172.17.0.2到quickstart.cloudera:8020连接exception失败:java.net.ConnectException:连接被拒绝
- 我无法连接到Rabbitmq服务器端口5672