【问题标题】:Setting up docker-compose.yml to run celery worker and celery beat for a django project with redis as broker设置 docker-compose.yml 以运行 celery worker 和 celery beat 用于以 redis 作为代理的 django 项目
【发布时间】:2017-06-26 17:52:33
【问题描述】:

我已经使用 django cookiecutter 设置了 django 项目。项目脚手架非常好。我还选择使用 docker 和它一起使用。现在我正在努力让 celery v4.0.x 在整个设置中工作。

这是我的docker-compose.yml

version: '2'

volumes:
  postgres_data_dev: {}
  postgres_backup_dev: {}

services:
  postgres:
    build: ./compose/postgres
    volumes:
      - postgres_data_dev:/var/lib/postgresql/data
      - postgres_backup_dev:/backups
    environment:
      - POSTGRES_USER=application


  django:
    build:
      context: .
      dockerfile: ./compose/django/development/Dockerfile
    depends_on:
      - postgres
    environment:
      - POSTGRES_USER=application
      - USE_DOCKER=yes
    volumes:
      - .:/app
      - /tmp/
    links:
      - postgres
      - redis
    expose:
      - "8000"
    env_file:
      - ./dev.env
    restart:
      - "on-failure"


  nginx:
    build: 
      context: .
      dockerfile: ./compose/nginx/development/Dockerfile
    depends_on:
      - django
    ports:
      - "0.0.0.0:80:80"
    links:
      - django
    volumes_from:
      - django


  redis:
    image: redis:latest
    hostname: redis


  celeryworker:
    build:
      context: .
      dockerfile: ./compose/django/development/Dockerfile
    env_file: ./dev.env
    depends_on:
      - postgres
      - redis
    command: celery -A application.taskapp worker -l INFO
    restart: "on-failure"


  celerybeat:
    build:
      context: .
      dockerfile: ./compose/django/development/Dockerfile
    env_file: ./dev.env
    depends_on:
      - postgres
      - redis
    command: celery -A application.taskapp beat -l INFO

老实说,我觉得 celerybeat/celeryworker 服务的配置似乎存在一些小问题。如果有人能指出来就好了。

更新:

当我执行命令运行容器时,我收到一条错误消息,提示找不到应用程序

更新

这是新的撰写文件,它解决了我撰写中的一些错误。在完成所有工作的过程中,我还遇到了一个线程,有人提到服务的排序也很重要。所以在新版本中,django被放在了第一位。

version: '2'

volumes:
  postgres_data_dev: {}
  postgres_backup_dev: {}

services:

  django: &django
    build:
      context: .
      dockerfile: ./compose/django/development/Dockerfile
    depends_on:
      - postgres
    volumes:
      - .:/app
      - /tmp/
    links:
      - postgres
      - redis
    environment:
      - POSTGRES_USER=application
      - USE_DOCKER=yes
    expose:
      - "8000"
    env_file:
      - ./dev.env


  postgres:
    build: ./compose/postgres
    volumes:
      - postgres_data_dev:/var/lib/postgresql/data
      - postgres_backup_dev:/backups
    environment:
      - POSTGRES_USER=application
    ports:
      - "5432:5432"


  redis:
    image: redis:latest
    hostname: redis
    ports:
      - "0.0.0.0:6379:6379"
    env_file:
      - ./dev.env


  nginx:
    build:
      context: .
      dockerfile: ./compose/nginx/development/Dockerfile
    depends_on:
      - django
    ports:
      - "0.0.0.0:80:80"
    links:
      - django
    volumes_from:
      - django


  celeryworker:
    <<: *django
    depends_on:
      - redis
      - postgres
    command: "celery -A application.taskapp worker --loglevel INFO --uid taskmaster"

【问题讨论】:

  • 您遇到的实际问题是什么?为什么你不能让它工作,你有什么错误吗?
  • @Bono,我的错误只是检查更新
  • 你能发布错误本身吗? :)
  • @Bono 我把它修好了。我将更新我对 docker-compose.yml 所做的更改
  • @Bono:你是怎么解决的?

标签: python django celery docker-compose


【解决方案1】:

我正在使用相同的技术堆栈。这对我来说很好。 docker-compose.yml

redis:
    image: redis
    container_name: redis
    command: ["redis-server", "--port", "${REDIS_PORT}", "--appendonly", "yes","--maxmemory", "1gb", "--maxmemory-policy", "allkeys-lru"]
    ports:
        - "${REDIS_PORT}:${REDIS_PORT}"
    volumes:
        - .:/redis.conf
    networks:
        - pipeline-net

celery-worker:
    build:
    context: ./app
    container_name: celery-worker
    entrypoint: celery
    command: -A celery_app.celery worker --loglevel=info
    volumes:
    - .:/var/www/app/worker
    links:
    - redis
    depends_on:
    - redis
    networks:
    - pipeline-net

celery-beat:
    build:
    context: ./app
    container_name: celery-beat
    entrypoint: celery
    command: -A celery_app.celery beat --loglevel=info
    volumes:
    - .:/var/www/app/beat
    links:
    - celery-worker
    - redis
    depends_on:
    - celery-worker
    - redis
    networks:
    - pipeline-net

flower:
    image: mher/flower
    container_name: flower
    environment:
    - CELERY_BROKER_URL=redis://redis:6379
    - FLOWER_PORT=8888
    ports:
    - 8888:8888
    links:
    - redis
    - celery-worker
    - celery-beat
    depends_on:
    - redis
    - celery-worker
    - celery-beat
    networks:
    - pipeline-net

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 2019-05-02
    • 2021-03-12
    • 2019-11-15
    • 2019-09-30
    • 1970-01-01
    • 2020-06-07
    • 2018-07-13
    • 2021-05-09
    相关资源
    最近更新 更多