从Docker容器访问主机redis数据库
我试图通过我的docker容器连接到主机redis数据库。从Docker容器访问主机redis数据库
在我的dockerfile中,我有redis作为需求,它被安装[pip install redis],并且使用该docker文件构建映像。 后比我使用下面的命令实例化conatiner
sudo docker run -p 6543:6543 your_image_name
我app.py是继
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
import redis
def hello(request):
ds_id = '4000'
r_server = redis.Redis(unix_socket_path='/tmp/redis.sock')
result = r_server.set('foo','11')
return Response(result)
问题是,当安装在开始redis.sock文件的Redis不会产生,从而创造错误当我尝试连接时。
Dockerfile:
FROM centos:latest
MAINTAINER Ramana Rao <[email protected]>
# load base packages w/ yum
RUN yum install -y git gcc libffi-devel openssl-devel python-devel postgresql-devel libxml2-devel libxslt-devel
COPY ./requirements.txt .
RUN curl https://bootstrap.pypa.io/get-pip.py >get-pip.py && \
python get-pip.py && \
rm get-pip.py &&\
pip install -r requirements.txt
EXPOSE 6543
WORKDIR /app
COPY app /app
ENTRYPOINT [ "python" ]
CMD [ "app.py" ]
要求
pyramid
cornice
pyramid_chameleon
pyramid_beaker
pyramid_redis_sessions
pyRFC3339
oauthlib==0.7.2
oauth2client==1.5.2
pycrypto
PyOpenSSL
pymongo
SQLAlchemy
psycopg2
lxml
gspread
jira
waitress
paste
PasteDeploy
redis
是否有任何其他方式连接到主机redis的数据。
-
如果您在主机上运行的Redis的实例,只想容器连接到Redis的实例,那么你只需要装入容器内的套接字文件。例如,如果在主机上的套接字文件的位置是
/var/run/redis/redis.sock
和你想要的容器内的套接字文件的位置是/tmp/redis.sock
,然后启动容器是这样的:sudo docker run \ -p 6543:6543 \ -v /var/run/redis/redis.sock:/tmp/redis.sock \ your_image_name app.py
-
如果你想设置Redis的容器内和运行Python应用程序,请执行以下:
与内容创建一个文件
start.sh
:#!/bin/bash /usr/bin/redis-server >/dev/null 2>&1 & /usr/bin/python $1
进行以下修改文件
app.py
:r_server = redis.StrictRedis(host='localhost', port=6379, db=0)
进行以下修改您的Dockerfile:
添加包
epel-release
RUN yum install -y git gcc libffi-devel openssl-devel python-devel postgresql-devel libxml2-devel libxslt-devel
EPEL释放
安装Redis的
RUN yum install -y redis
复制上面
/app
目录中创建的脚本:COPY start.sh /app RUN chmod +x /app/start.sh
更改入口点开始。SH
ENTRYPOINT [ "/app/start.sh" ]
您需要访问的主机本地主机回环设备,所以你要做的就是https://gist.github.com/EugenMayer/3019516e5a3b3a01b6eac88190327e7c#file-gistfile1-txt
您在
/Library/LaunchDaemons/docker.loopback.alias.plist
-
你OSX。然后,您重新启动您的mac,然后您可以使用容器中的ip 10.254.254.254
访问主机回送设备,因此,现在您可以从容器配置redist以连接到10.254.254.254:6543
- 然后使用您的osx-host Redis的
理论: 您需要创建这个回环别名,因为你不能在容器中使用localhost
,因为这会拿起容器本身的回环设备 - 他自己的回环设备 - 不是回环设备您的主机
如果你使用unixsocket,那么不需要做所有这些。只需在容器中安装套接字文件即可。看到我答案中的第一点。 –
向我们显示您的Dockerfile。看来redis服务器还没有运行。 –
我在问题中添加了我的docker文件 – Ishita
在运行python应用程序之前,您尚未安装redis服务器并启动它。请参阅:http://stackoverflow.com/q/31660691/1005215 –