我正在尝试通过我的 docker conatiner 连接到主机 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 在开始安装时没有生成 redis.sock 文件,因此在我尝试连接时产生错误。
docker 文件:
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数据。
最佳答案
您需要访问主机本地主机环回设备,所以您要做的是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
你是 OSX。然后你重新启动你的 mac,之后,你可以使用 ip 10.254.254.254
从容器内部访问主机环回设备,所以你现在可以从容器配置redist 以连接到 10.254.254.254:6543
- 然后它将使用您的 osx-host redis
理论:
您需要创建此环回别名,因为您不能在容器中使用 localhost
,因为这会选择 容器本身的环回设备 - 他自己的环回设备 - 而不是主机的环回设备
关于python - 从 docker 容器访问主机 redis 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38987997/