我想把django连接到redis码头
这是我的码头文件
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 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())
我验证了没有@cache_page
装饰器一切都正常。
当我使用装饰师的时候
Error 61 connecting to localhost:6379. Connection refused.
我不知道如何暴露码头容器,除了设置Expose
端口,任何帮助都将不胜感激。
谢谢
发布于 2016-03-19 17:18:07
这里需要理解的是,容器公开的港口!=系统公开的港口。
redis的Docker容器正在从容器中公开端口6379 --这与主机系统中的端口不同。
假设你在运行对接者:
docker run -ti redis bash
默认情况下,Docker将在主机中选择一个随机端口,以便绑定到容器正在公开的端口。您可以使用命令检查主机端口(如果没有公开端口,则不显示任何内容):
docker port CONTAINER_ID
相反,您需要像这样运行它:
docker run -ti redis bash -p 6379:6379
这将告诉Docker将6379主机端口链接到6379集装箱端口。然后码头港口将向您展示这样的东西:
$ docker port CONTAINER_ID
6379/tcp -> 0.0.0.0:6379
您还可以使用docker-compose.yml
文件来配置此文件。
阅读更多信息:
https://stackoverflow.com/questions/36107810
复制相似问题