如何将django连接到docker redis容器?

我正在尝试将django连接到docker redis容器

这是我的docker文件

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

这是docker ps -a的结果

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

这是一个快速的完整性检查,redis在docker容器中工作

  docker exec -ti redis bash root@4f7eaeb2761b:/# redis-cli ping PONG root@4f7eaeb2761b:/# redis-cli 127.0.0.1:6379> exit 

这是我的Django settings.py

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

这是我的看法

 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()) 

这里是替代的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()) 

我validation了一切工作没有@cache_page装饰

当我使用装饰我得到

 Error 61 connecting to localhost:6379. Connection refused. 

我不知道如何公开Docker容器除了设置Expose端口,任何帮助将不胜感激

谢谢

这里要理解的是容器暴露的端口!=系统暴露的端口。

redis的Docker容器将容器中的端口6379公开 – 这与主机系统中的端口不同。

假设你正在运行docker:

 docker run -ti redis bash 

默认情况下,Docker将在主机中select一个随机端口来绑定到容器所在的端口。 您可以使用命令检查主机端口(如果没有端口被暴露,将不会显示):

 docker port CONTAINER_ID 

相反,你会想要像这样运行它:

 docker run -ti redis bash -p 6379:6379 

这告诉Docker将6379主机端口链接到6379容器端口。 然后docker端口会告诉你这样的事情:

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

您也可以使用docker-compose.yml文件来configuration它。

阅读更多:

  • Dockernetworking规则简介
  • Docker撰写文档