docker cron
如果我需要在一个容器中使用linux cron并执行命令怎么办?
当我开始使用Google进行搜索时,我立即发现了2个解决方案,但两者似乎都非常糟糕:
错误的选择1:
生成自定义crontab映像,在其中复制crontab文件,然后对其他容器运行命令。
这种方法的问题是 -每次我需要更改cron命令或添加新命令时,都需要重建该映像。 从我的cron容器向其他我确实需要运行命令的容器进行调用也将是一个很大的问题。
错误的选择2:
修改容器以运行crontab。
这种方法的问题是 -我的容器将必须运行2个命令(crontab +用于运行的任何容器)-这与docker的理念相矛盾,每个容器仅应负责1个任务。
不错的选择:
在启动Docker容器的主机上运行cron。
我可以在crontab中使用这样的命令来做到这一点:
* * * * * docker exec -t {containerID} {command} >> /dev/null 2>&1
For example:
* * * * * docker exec -t $(docker ps -qf "name=docker_php_1") php artisan schedule:run >> /dev/null 2>&1
笔记:
- 通常我会运行“ docker exec -t <container_id> php artisan schedule:run ”-但是每次重新启动容器时容器ID都会更改,并且我不想每次都更改crontab
- $( docker ps -qf“ name = docker_php_1” )-允许基于容器名称的搜索获取容器ID
- $( docker ps -qf“ ancestor = php:7.2-fpm” )-允许基于图像名称搜索获取容器ID
- php artisan schedule: run- 运行 Laravel的特定命令来运行计划任务,此处仅作为示例使用
翻译自: https://hackernoon.com/how-to-setup-cron-and-docker-correctly-a-how-to-guide-9v5f36kz
docker cron