问题 运行 Docker 容器内的 Celery 任务

Problem running Celery task inside Docker container

我有什么

我有一个带有 Django 应用程序的容器,它执行一个 Celery 任务,其目的是删除 media 文件夹中的一些文件,该容器在 docker-compose.yml 中称为 backend

问题

问题是Celery WorkerCelery beat容器正常运行并执行任务但不删除media文件。可能问题出在安装在容器上的 volumes 并且 Celery 不知何故找不到要删除的媒体文件。

docker-compose.yml

version: '3.8'

services:
  # Django app that will upload the files from the admin and that will be deleted by the Celery task.
  backend:
    expose:
      - 8000
    build:
      context: .
      dockerfile: ./Dockerfile
    networks:
      - backend-tier
    depends_on:
      - db

  redis:
    image: library/redis:5.0-alpine
    ports:
      - 6379:6379
    restart: unless-stopped
    networks:
      - backend-tier
    volumes:
      - valor-redis:/data

  worker:
      build:
        context: .
        dockerfile: ./Dockerfile
      command: celery -A config --app=config.celery_app:app worker --loglevel=info
      restart: unless-stopped
      networks:
        - backend-tier
      depends_on:
        - redis
      volumes:
        - ./app_com_co/:/app/app_com_co:Z,cached
        - ./app_com_co/templates/:/app/app_com_co/templates:Z,cached
        # shared volume between worker and backend for media
        - app-media:/app/app_com_co/media
  
  beat:
    build:
      context: .
      dockerfile: ./Dockerfile
    command: celery -A config --app=config.celery_app:app beat --loglevel=info
    restart: unless-stopped
    networks:
      - backend-tier
    depends_on:
      - redis
    volumes:
      - ./app_com_co/:/app/app_com_co:Z,cached
      - ./app_com_co/templates/:/app/app_com_co/templates:Z,cached
      # shared volume between beat and backend for media
      - app-media:/app/app_com_co/media

volumes:
  app-redis:
    driver: local
  app-media:

networks:
  backend-tier:
    driver: bridge

如果文件上传到 backend,您缺少需要添加到 app-media 的卷。