【问题标题】:How can I setup celery beat in docker?如何在 docker 中设置 celery beat?
【发布时间】:2021-12-01 06:59:15
【问题描述】:

在 settings.py 中

CELERY_TIMEZONE = 'Europe/Minsk'
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT = 30 * 60
CELERY_BROKER_URL = os.environ.get('CELERY_BROKER_URL')
CELERY_RESULT_BACKEND = os.environ.get('CELERY_BROKER_URL')

CELERY_BROKER_URL = redis://redis:6379

config/celery.py:

import os

from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')

app = Celery('config')

app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

app.conf.beat_schedule = {
    'pulling-games-to-database': {
        'task': 'gamehub.tasks.pull_games',
        'schedule': 604800.0,
    }
}

docker-compose.yml

version: '3'


services:
  db:
    build:
      context: ./docker/postgres
      dockerfile: Dockerfile
    env_file:
      - ./.env.db
    volumes:
      - ./docker/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql
    restart: always
    ports:
      - '5432:5432'

  redis:
    image: redis
    ports:
      - '6379:6379'

  celery:
    build: .
    command: celery -A config worker -l info
    volumes:
      - .:/code
    depends_on:
      - db
      - redis

  celery-beat:
    build: .
    command: celery -A config beat -l info
    volumes:
      - .:/code
    depends_on:
      - db
      - redis

  app:
    build:
      context: ./
      dockerfile: Dockerfile
    env_file:
      - ./.env
    volumes:
      - ./:/usr/src/app
    depends_on:
      - db
      - redis
    ports:
      - '8000:8000'
    restart: always

  nginx:
    build:
      context: ./docker/nginx
      dockerfile: Dockerfile
    depends_on:
      - app
      - db
    ports:
      - '80:80'

当我运行它时

sudo docker-compose build --no-cache
sudo docker-compose up

我没有看到任何错误。以及我没有看到芹菜产量。 我的任务定期将数据放入数据库。此数据必须显示在主页上。但事实并非如此。 我很确定数据库已连接,因为其他功能正常工作。 如果您需要从我的项目中展示其他内容,请告诉我。

【问题讨论】:

  • appcelerycelery-beat 都使用相同的代码和 docker 映像,但它们的卷不同?
  • @IainShelvington 是的,已经注意到这一点。但是重构这并没有解决我的问题:(
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: django docker django-celery


【解决方案1】:

docker-compose.yml:

  celeryworker:
    image: celeryworker
    ports: []
    command: /start-celeryworker

  celerybeat:
    image: celerybeat
    ports: []
    command: /start-celerybeat

  flower:
    image: flower
    ports:
      - "5545:5545"
    command: /start-flower

Dockerfile:

COPY ./compose/local/celery/worker/start /start-celeryworker
RUN sed -i 's/\r//' /start-celeryworker
RUN chmod +x /start-celeryworker

COPY ./compose/local/celery/beat/start /start-celerybeat
RUN sed -i 's/\r//' /start-celerybeat
RUN chmod +x /start-celerybeat

COPY ./compose/local/celery/flower/start /start-flower
RUN sed -i 's/\r//' /start-flower
RUN chmod +x /start-flower

【讨论】:

  • 什么是 '
  • 只需将其删除或替换为您的应用即可。
猜你喜欢
  • 2012-08-12
  • 2019-05-02
  • 2017-08-07
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 2015-01-01
相关资源
最近更新 更多