Come colbind django al contenitore docker redis?

Sto cercando di colbind django al contenitore docker redis

Ecco il mio file docker

FROM ubuntu:14.04 RUN apt-get update && apt-get install -y redis-server EXPOSE 6379 ENTRYPOINT ["/usr/bin/redis-server"] 

Ecco il risultato di docker ps -a

 4f7eaeb2761b /redis "/usr/bin/redis-serve" 16 hours ago Up 16 hours 6379/tcp redis 

Ecco un rapido controllo della sanità che il redis sta lavorando all'interno del contenitore docker

  docker exec -ti redis bash [email protected]:/# redis-cli ping PONG [email protected]:/# redis-cli 127.0.0.1:6379> exit 

Ecco il mio Django settings.py

 CACHES = { 'default': { 'BACKEND': 'redis_cache.RedisCache', 'LOCATION': 'localhost:6379', }, } 

Ecco la mia opinione

 from django.shortcuts import render from django.template import loader from django.http import HttpResponse from django.views.decorators.cache import cache_page @cache_page(60 * 15) def index(request): template = loader.get_template('./index.html') return HttpResponse(template.render()) 

Ecco l'accesso alternativo a redis

 import redis def index(request): r = redis.StrictRedis(host='localhost', port=6379, db=0) print r # this line doesn't cause error r.set('foo', 'bar') # this line cause error template = loader.get_template('./index.html') return HttpResponse(template.render()) 

Ho verificato che tutto funziona senza il decoratore @cache_page

Quando ho usato decoratore che sto ottenendo

 Error 61 connecting to localhost:6379. Connection refused. 

Non sono sicuro di come esporre il contenitore docker oltre a impostare la port Expose , qualsiasi aiuto sarà apprezzato

Grazie

La cosa da capire qui è che il contenitore esposto porti! = Porte esposte al sistema.

Il contenitore Docker per redis sta esponendo la port 6379 dal contenitore – che non è la stessa port del sistema host.

Supponendo che stai eseguendo docker con:

 docker run -ti redis bash 

Per impostazione predefinita, Docker sceglierà una port random nell'host per legarsi alla port che il contenitore sta esponendo. È ansible controllare le porte host con il command (non mostrerà nulla se nessuna port è esposta):

 docker port CONTAINER_ID 

Invece, si desidera eseguire così:

 docker run -ti redis bash -p 6379:6379 

Questo dice a Docker di colbind la port host 6379 alla port container 6379. Poi la port docker vi mostrerà qualcosa di simile:

 $ docker port CONTAINER_ID 6379/tcp -> 0.0.0.0:6379 

È anche ansible utilizzare un file docker-compose.yml per configurarlo.

Leggi di più:

  • Breve Primer sulle regole di networking di Docker
  • Docker Compose la documentazione