1

我被卡住了,需要帮助。我在 docker cloud 上设置了多个堆栈。堆栈运行多个容器,如数据、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)

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

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

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

谢谢你的帮助

4

1 回答 1

2

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

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

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

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

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

于 2017-02-09T15:39:03.817 回答