问题 运行 Docker 容器内的 Celery 任务
Problem running Celery task inside Docker container
我有什么
我有一个带有 Django 应用程序的容器,它执行一个 Celery 任务,其目的是删除 media
文件夹中的一些文件,该容器在 docker-compose.yml
中称为 backend
。
问题
问题是Celery Worker
和Celery 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
的卷。
我有什么
我有一个带有 Django 应用程序的容器,它执行一个 Celery 任务,其目的是删除 media
文件夹中的一些文件,该容器在 docker-compose.yml
中称为 backend
。
问题
问题是Celery Worker
和Celery 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
的卷。