【问题标题】:Running a cronjob or task inside a docker cloud container在 docker 云容器中运行 cronjob 或任务
【发布时间】:2017-06-27 16:01:25
【问题描述】:

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

现在我需要在 Web 容器上运行命令。在 docker 之前,我使用 cronjob 执行此操作,例如:

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

但我的 web Dockerfile 以

结尾
CMD ["apache2-foreground"]

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

我也应该在 CMD 中启动 cron 吗?

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

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

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

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

感谢您的帮助

【问题讨论】:

    标签: docker cron scheduled-tasks docker-cloud


    【解决方案1】:

    一般来说,我看到 3 个选项:

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

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

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

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

    【讨论】:

    • 感谢您的一些想法。 docker cloud 只是一种可以在 AWS、Azure、DigitalOcean 等服务上扩展节点的服务。尽管您可以自带节点。这就是我现在正在使用的。所以使用我自己的 cron 节点是可能的,但这并不是一个真正的选择,因为我需要在将新消息带到我的生态系统后寻找新消息。我会看看其他的东西,会在这里告诉他们。
    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 2023-04-10
    • 2020-12-06
    • 2021-05-08
    • 1970-01-01
    • 2020-09-13
    • 2022-06-15
    • 2018-09-02
    相关资源
    最近更新 更多