2017-02-09 73 views
1

我被卡住了,需要幫助。我已經在Docker雲上設置了多個堆棧。該堆棧正在運行多個容器,如數據,mysql,web,elasticsearch等。在碼頭雲容器內部運行cronjob或任務

現在我需要在Web容器上運行命令。泊塢窗之前,我這樣做是與的cronjob例如:

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

但我的網站Dockerfile與

CMD ["apache2-foreground"] 

據我瞭解運行在一個容器中的兩個命令是不好的做法泊塢窗概念結束。但是,我將如何安排像上面那個cronjob這樣的工作?

我應該在CMD中啓動cron嗎?

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

我應該啓動一個運行這兩個命令的腳本嗎?

在我看來,最聰明的解決方案是創建另一個服務,如dockercloud haproxy之一,其他服務鏈接。

然後,cron服務將執行在鏈接容器/堆棧的Stackfile中定義的命令。

感謝您的幫助

回答

2

採用一般的搬運工我看到3個選項:

  • 運行cron進程在同一容器
  • 運行cron進程在不同的容器
  • 運行cron在主機上,在碼頭外

用於在同一個容器中運行cron你可以看看https://github.com/phusion/baseimage-docker

或者你可以創建一個單獨的容器,其中唯一運行的進程是cron守護進程。我沒有一個方便的鏈接,但他們是我們的。然後,您使用cron調用來連接到其他容器並調用您想要運行的內容。使用一個應該足夠簡單的apache容器,只需公開一些最小的http API端點,它可以在調用它時做你想做的事情(確保它不容易受到任何注入的攻擊,即不傳遞任何參數,保持簡單的愚蠢) 。

如果你有主機的控制權,那麼你可以(ab)使用在那裏運行的cron守護進程(我現在用我的容器來做這個)。我不知道碼頭雲,但有些東西告訴我這可能不適合你。

相關問題