Django + docker +周期性命令

在docker(docker-compose)中运行Django时,运行周期性/计划任务(如manage.py custom_command)的最佳做法是什么?

最常见的情况是 – ./manage.py clearsessions

  • Djangobuild议使用cronjobs来运行它…
  • 但是,Docker不build议在一个容器中添加多个正在运行的服务。

我想我可以为每个需要运行的命令创build一个docker-compose服务 – 并且该命令应该运行无限循环并且需要睡眠,但是对于每个需要调度的命令

你有什么build议?

用你的Django应用程序创build一个docker镜像。

你可以用它来运行你的Django应用程序(web界面),同时使用cron通过将命令传递给docker可执行文件来安排你的周期性任务,如下所示:

docker exec --rm your_container python manage.py clearsessions 

--rm将确保docker在完成后移除容器; 否则你会很快停下容器,这是没有用的。

您也可以传入任何额外的参数,例如使用-e来修改环境:

 docker exec --rm -e DJANGO_DEBUG=True -e DJANGO_SETTINGS_MODULE=production \ python manage.py clearsessions 

为我工作的方式

在我的Django项目中,我有一个这样的crontab文件:

 0 0 * * * root python manage.py clearsessions > /proc/1/fd/1 2>/proc/1/fd/2 

在我的Dockerfile中安装/configuration了cron

 RUN apt-get update && apt-get -y install cron ADD crontab /etc/cron.d/crontab RUN chmod 0644 /etc/cron.d/crontab 

并在docker-compose.yml中添加一个新的服务,将build立与django项目相同的图像,但将运行cron -f作为CMD

 version: '3' services: web: build: ./myprojectname ports: - "8000:8000" #... cronjobs: build: ./myprojectname command: ["cron", "-f"] 
Interesting Posts