【问题标题】:Incorrect work memcached + docker-compose: returns None不正确的工作 memcached + docker-compose:返回无
【发布时间】:2018-04-05 13:02:05
【问题描述】:

我需要你的帮助。我正在尝试使用 memcached + docker-compose 但我得到了None。我用 memcached 做了端口转发网络。基本缓存被赋予 11211 端口。

我做错了什么?

View.py 示例

from django.core.cache import cache

def show_category(requests):
categorys_name = CategoryNews.objects.all()
cache_key = 'category_names'
cache_time = 1800
result = cache.get(cache_key)
print(result)
if result is None:
    result = categorys_name
    cache.set(cache_key, result, cache_time)
    return render(requests, 'home_app/category.html', {'categorys_name':categorys_name})
return print('No none')

设置

CACHES = {
'default': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': '0.0.0.0:11211',
 }
}

Docker 编写

sersion: '3'

services:
  db:
    restart: always
    image: postgres

  web:
    restart: always
    working_dir: /var/app
    build: ./testsite
    entrypoint: ./docker-entrypoint.sh
    volumes:
      - ./testsite:/var/app
    expose:
      - "80"
      - "11211"
    depends_on:
      - db

    ngnix:
      restart: always
      build: ./ngnix
      ports:
        - "80:80"
      volumes:
        - ./testsite/static:/staticimage
        - ./testsite/media:/mediafilesh
      depends_on:
        - web

    memcached:
      image: memcached:latest
      entrypoint:
        - memcached
        - -m 64
      ports:
        - "11211:11211"
      depends_on:
        - web

【问题讨论】:

    标签: python django docker-compose memcached


    【解决方案1】:

    您需要在 memcached 容器上公开端口并在缓存配置中使用 memcached 作为 LOCATION。我想你对exposeports 有误解:

    公开: 公开端口而不将它们发布到主机(您的计算机) - 它们只能由链接的服务(在容器之间)访问。只能指定内部端口。

    端口: 公开端口。要么指定两个端口 (HOST:CONTAINER),要么只指定容器端口(将选择随机主机端口)。因此,您将主机端口(您的计算机)重定向到容器端口

    因此,在您的特定示例中,这应该会有所帮助:

    Docker-compose.yml

    version: '3'
    
    services:
      db:
        restart: always
        image: postgres
    
      web:
        restart: always
        working_dir: /var/app
        build: ./testsite
        entrypoint: ./docker-entrypoint.sh
        volumes:
          - ./testsite:/var/app
        expose:
          - "80"
        depends_on:
          - db
    
      ngnix:
        restart: always
        build: ./ngnix
        ports:
          - "80:80"
        volumes:
          - ./testsite/static:/staticimage
          - ./testsite/media:/mediafilesh
        depends_on:
          - web
    
      memcached:
        image: memcached:latest
        entrypoint:
          - memcached
          - -m 64
        ports:
          - "11211:11211" # This is only needed if you wants to connect from your host to the container
        expose:
          - "11211"
        depends_on:
          - web
    

    您的缓存设置:

    CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'memcached:11211',
     }
    }
    

    请注意,memcached 是对 docker-compose.yml 文件中的 memcached 容器的引用。例如,如果您将 memcached 容器命名为 my_project_memcached,您将需要在设置文件中使用该名称。

    my_project_memcached:
      image: memcached:latest
      entrypoint:
        - memcached
        - -m 64
      ports:
        - "11211:11211"
      expose:
        - "11211"
      depends_on:
        - web
    

    【讨论】:

      猜你喜欢
      • 2016-09-17
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 2021-12-24
      • 2018-06-29
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多