我正在尝试通过我的docker conatiner连接到主机redis数据库。
在我的dockerfile中,我将redis作为一项要求,安装[pip install redis]并使用该docker文件构建映像。 之后,我使用以下命令
实例化conatinersudo 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安装在开头时,没有生成redis.sock文件,因此在我尝试连接时会产生错误。
Dockerfile:
FROM centos:latest
MAINTAINER Ramana Rao <treerao@gmail.com>
# 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数据。
答案 0 :(得分:0)
如果您在主机上运行了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
将入口点更改为start.sh
ENTRYPOINT [ "/app/start.sh" ]
答案 1 :(得分:0)
您需要访问主机localhost loopback设备,因此您所做的是https://gist.github.com/EugenMayer/3019516e5a3b3a01b6eac88190327e7c#file-gistfile1-txt
您可以在
创建此文件/Library/LaunchDaemons/docker.loopback.alias.plist
sudo chown root:staff /Library/LaunchDaemons/docker.loopback.alias.plist
10.254.254.254
访问主机环回设备,因此您可以从容器中配置redist以连接到{ {1}} - 然后将使用您的osx-host redis
理论值:
你需要创建这个环回别名,因为你不能在容器中使用10.254.254.254:6543
,因为这会选择容器本身的环回设备 - 他自己的环回设备 - 而不是环回设备您的主人