如何使用 Docker 清除 Django 的缓存?
How to clear cache for Django with Docker?
我有一个与 memcached 和 Docker 一起使用的 Django 项目。当我在开发中使用 sudo docker-compose up
时,我希望清除整个缓存。而不是在开发模式下禁用缓存批发,有没有办法 运行 cache.clear()
在 sudo docker-compose up
的每个 re-运行 中提到的 this question?
我不确定是否应该加入:
docker-entrypoint.sh
Dockerfile
docker-compose.yml
- 其他地方?
docker-compose.yml:
version: "3"
services:
redis:
image: "redis:alpine"
command: "redis-server --requirepass ${REDISPASS} --bind 0.0.0.0"
ports:
- '6379:6379'
memcached:
image: "memcached:latest"
ports:
- '11211:11211'
nginx:
image: nginx:latest
volumes:
- ./configuration/nginx/conf.d/:/etc/nginx/conf.d
- ./configuration/nginx/realtime:/etc/nginx/realtime
- ./static_cdn/static_root/static:/static
ports:
- 80:80
- 443:443
depends_on:
- app_main
- app_async_app1
- app_async_app2
app_main:
command: "djangoAppName.settings.prod ${SECRET_KEY} 1 ${DB_PASS} ${REDISPASS}"
image: "django_image_name"
ports:
- 0003:0003
volumes:
- ./static_cdn/static_root/:/static_cdn/
depends_on:
- redis
- memcached
app_async_app2:
command: "djangoAppName.settings.prod ${SECRET_KEY} 2 ${DB_PASS} ${REDISPASS}"
image: "django_image_name"
ports:
- 0002:0002
depends_on:
- redis
- memcached
- app_main
app_async_app1:
command: "djangoAppName.settings.prod ${SECRET_KEY} 3 ${DB_PASS} ${REDISPASS}"
image: "django_image_name"
depends_on:
- redis
- memcached
- app_main
ports:
- 0001:0001
react:
command: "npm run"
image: "django_image_name"
volumes:
- ./static_cdn/static_root/:/static_cdn/
depends_on:
- memcached
- app_main
根据 ,您可以添加一个在清除缓存的 memcached 服务之前执行的服务。看起来您正在使用 Linux Alpine,您可以将此服务添加到 docker-compose.yml
:
clearcache:
command: [sh, -c, "python manage.py clear_cache"]
然后添加到memcached
:
memcached:
...
depends_on:
- clearcache
那里还有一个例子,它在同一个命令中执行,而不依赖于单独的服务(尽管我个人不喜欢那样)。
对于缓存清除命令,this answer 有一些有用的讨论和帖子。
clear_cache.py:
from django.core.management.base import BaseCommand
from django.core.cache import cache
class Command(BaseCommand):
def handle(self, *args, **kwargs):
cache.clear()
self.stdout.write('Cleared cache\n')
我有一个与 memcached 和 Docker 一起使用的 Django 项目。当我在开发中使用 sudo docker-compose up
时,我希望清除整个缓存。而不是在开发模式下禁用缓存批发,有没有办法 运行 cache.clear()
在 sudo docker-compose up
的每个 re-运行 中提到的 this question?
我不确定是否应该加入:
docker-entrypoint.sh
Dockerfile
docker-compose.yml
- 其他地方?
docker-compose.yml:
version: "3"
services:
redis:
image: "redis:alpine"
command: "redis-server --requirepass ${REDISPASS} --bind 0.0.0.0"
ports:
- '6379:6379'
memcached:
image: "memcached:latest"
ports:
- '11211:11211'
nginx:
image: nginx:latest
volumes:
- ./configuration/nginx/conf.d/:/etc/nginx/conf.d
- ./configuration/nginx/realtime:/etc/nginx/realtime
- ./static_cdn/static_root/static:/static
ports:
- 80:80
- 443:443
depends_on:
- app_main
- app_async_app1
- app_async_app2
app_main:
command: "djangoAppName.settings.prod ${SECRET_KEY} 1 ${DB_PASS} ${REDISPASS}"
image: "django_image_name"
ports:
- 0003:0003
volumes:
- ./static_cdn/static_root/:/static_cdn/
depends_on:
- redis
- memcached
app_async_app2:
command: "djangoAppName.settings.prod ${SECRET_KEY} 2 ${DB_PASS} ${REDISPASS}"
image: "django_image_name"
ports:
- 0002:0002
depends_on:
- redis
- memcached
- app_main
app_async_app1:
command: "djangoAppName.settings.prod ${SECRET_KEY} 3 ${DB_PASS} ${REDISPASS}"
image: "django_image_name"
depends_on:
- redis
- memcached
- app_main
ports:
- 0001:0001
react:
command: "npm run"
image: "django_image_name"
volumes:
- ./static_cdn/static_root/:/static_cdn/
depends_on:
- memcached
- app_main
根据 docker-compose.yml
:
clearcache:
command: [sh, -c, "python manage.py clear_cache"]
然后添加到memcached
:
memcached:
...
depends_on:
- clearcache
那里还有一个例子,它在同一个命令中执行,而不依赖于单独的服务(尽管我个人不喜欢那样)。
对于缓存清除命令,this answer 有一些有用的讨论和帖子。
clear_cache.py:
from django.core.management.base import BaseCommand
from django.core.cache import cache
class Command(BaseCommand):
def handle(self, *args, **kwargs):
cache.clear()
self.stdout.write('Cleared cache\n')