我正试图通过我的码头管理员管理员连接到主机redis数据库。
在我的dockerfile中,我有redis作为一个要求,它得到安装pip安装redis,而映像是使用该坞文件构建的。之后,我将使用以下命令实例化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时,不会生成redis.sock文件,因此当我试图连接时会产生错误。
Dockerfile:
FROM centos:latest
# 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数据。
发布于 2016-08-17 05:05:57
/var/run/redis/redis.sock,并且您希望容器内的套接字文件的位置是/tmp/redis.sock,那么按如下方式启动容器:
数独坞运行\ -p 6543:6543 \ -v /var/ run /redis/redis.sock:/tmp/redis.sock \ your_image_name app.pystart.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
运行yum安装-y git gcc libffi-devel openssl-devel python-devel postgresql-devel libxml2-devel libxslt-devel
埃佩尔释放
安装redis
运行yum安装-y redis
将上面创建的脚本复制到/app目录:
复制start.sh /app运行chmod +x /app/start.sh
将入口点更改为start.sh
ENTRYPOINT "/app/start.sh“发布于 2016-08-17 06:27:41
您需要访问主机本地主机环回设备,所以您要做的是https://gist.github.com/EugenMayer/3019516e5a3b3a01b6eac88190327e7c#file-gistfile1-txt
创建此文件的
/Library/LaunchDaemons/docker.loopback.alias.plistsudo chown root:staff /Library/LaunchDaemons/docker.loopback.alias.plist你这个OSX。然后重新启动mac,然后可以从容器10.254.254.254 内部使用ip 访问主机回送设备,因此现在可以从容器中配置redist连接到10.254.254.254:6543,后者将使用您的osx主机redis。
理论:您需要创建这个回送别名,因为您不能在容器中使用localhost,因为这将获取容器本身的回送设备(他自己的回送设备),而不是主机的回送设备。
https://stackoverflow.com/questions/38987997
复制相似问题