在 docker-compose 中为特定服务添加 cron 作业(计划任务)的最佳方法是什么

Ros*_*007 5 cron celery docker dockerfile docker-compose

我正在使用 docker-compose。我有一个网络和一个工人服务。

version: '3'
services:
  web:
    build: .
    environment:
      - "*"
    links:
      - redis
      - memcached
    ports:
      - "80:8001"
      - "443:8001"

  worker:
    build: .
    command: ["/bin/bash", "/home/django/start_celery.sh"]
    environment:
      - "*"
    links:
      - redis
      - memcached

  memcached:
    image: memcached
    ports:
      - "11211:11211"

  redis:
    image: redis
    ports:
      - "6379:6379"
Run Code Online (Sandbox Code Playgroud)

我需要在工作服务上运行 crons(计划任务)。

而且我不想在 Dockerfile 中对 crontab 进行硬编码,因为我对这两个服务使用相同的 dockerfile。

那么最好的方法是什么?

小智 5

您可以尝试以下开源工具在 docker-compose 中调度 cron。

https://github.com/mcuadros/ofelia

例如:

 [job-service-run "service-executed-on-new-container"]
 schedule = 0,20,40 * * * *
 image = ubuntu
 network = swarm_network
 command =  touch /tmp/example
Run Code Online (Sandbox Code Playgroud)

如果您计划在任何云平台中使用该映像。

对于例如。

AWS:您还可以查看 ECS 调度程序

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduled_tasks.html

GCP:Kubernetes 引擎 CronScheduler

https://cloud.google.com/kubernetes-engine/docs/how-to/cronjobs