【问题标题】:How to clear cache for Django with Docker?如何使用 Docker 清除 Django 的缓存?
【发布时间】:2019-03-07 14:37:03
【问题描述】:

我有一个与 memcached 和 Docker 一起使用的 Django 项目。当我在开发中使用sudo docker-compose up 时,我希望清除整个缓存。除了在开发模式下禁用缓存批发之外,有没有办法在每次重新运行sudo docker-compose up 时运行cache.clear() 中提到的this question

我不确定这是否应该进入:

  1. docker-entrypoint.sh
  2. Dockerfile
  3. docker-compose.yml
  4. 其他地方?

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

【问题讨论】:

  • 它应该是 Dockerfile 的 CMD 的一部分,但这取决于你如何组织你的 docker 配置。我相信它也可以进入docker-compose.ymlcommand键。如果您发布您的设置,根据它推荐放置位置会更容易。
  • 谢谢@Nobilis。添加了 .yml。如果您认为这就是清除缓存所需的全部内容,请告诉我!感谢您的帮助。

标签: python django docker docker-compose memcached


【解决方案1】:

根据this answer,您可以添加一个在清除缓存的 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2011-11-28
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多