python - 从 docker 容器访问主机 redis 数据库

标签 python database docker redis

我正在尝试通过我的 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/

相关文章:

php - 将MySQL时间戳转换为DAY,然后按MAX排序

database - 从导入的规则生成集

ssh - 连接到正在运行的 docker 容器 - 使用 ssh 和运行带有 "-t -i"参数的命令之间的区别

Windows 上带有 Docker 的 Linux 内核与 WSL Linux 内核不匹配

python - 从 flask 中的客户处获取时间

python - pandas 数据帧上的条件过滤器和 groupby

python - 无法从 Pyside 导入 QtCore

c# - 从关系数据库映射

Python While 循环,也使用取模和继续命令

docker - 在Windows 10的Docker中运行具有多个节点的Couchbase群集