首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python连接到Redis集群(在Docker中)

用Python连接到Redis集群(在Docker中)
EN

Stack Overflow用户
提问于 2019-08-29 07:28:57
回答 1查看 2.2K关注 0票数 3

我正在设置一个高度可用的Redis集群(带有哨兵),并且需要用Python向其写入数据。但是,我不知道在从Python连接时使用哪个主机名,而且我也收到了“连接拒绝”。

我的Dockerfile:

代码语言:javascript
复制
FROM redis:latest
ADD sentinel.conf /etc/redis/sentinel.conf
RUN chown redis:redis /etc/redis/sentinel.conf
ENV SENTINEL_QUORUM 2
RUN mkdir app
WORKDIR /app
ENV SENTINEL_DOWN_AFTER 5000
ENV SENTINEL_FAILOVER 10000
ENV SENTINEL_PORT 26000
ADD entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 26379 6379

FROM python:2.7-slim
WORKDIR /app
COPY . /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
CMD ["python", "app.py"]

docker-compose.yml

代码语言:javascript
复制
ervices:

  redis-master:
    container_name: redis-master
    image: redis:latest
    command: redis-server --port 6379
    ports:
      - "6379:6379"
    volumes:
      - .:/app

  redis-slave:
    container_name: redis-slave
    image: redis:latest
    command: redis-server --slaveof redis-master 6379 --protected-mode no
    volumes:
       - .:/app

  sentinel-1:
    container_name: sentinel-1
    build: sentinel
    environment:
      - SENTINEL_DOWN_AFTER=5000
      - SENTINEL_FAILOVER=5000

  sentinel-2:
    container_name: sentinel-2
    build: sentinel
    environment:
      - SENTINEL_DOWN_AFTER=5000
      - SENTINEL_FAILOVER=5000

  sentinel-3:
    container_name: sentinel-3
    build: sentinel
    environment:
      - SENTINEL_DOWN_AFTER=5000
      - SENTINEL_FAILOVER=5000

我试图运行的Python代码:

代码语言:javascript
复制
r = redis.StrictRedis(host='0.0.0.0', port=6379, db=0)
print ("set key1 123")
print (r.set('key1', '123'))
print ("get key1")
print(r.get('key1'))

错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "app.py", line 7, in <module>
    print (r.set('key1', '123'))
  File "/usr/local/lib/python2.7/site-packages/redis/client.py", line 1519, in set
    return self.execute_command('SET', *pieces)
  File "/usr/local/lib/python2.7/site-packages/redis/client.py", line 836, in execute_command
    conn = self.connection or pool.get_connection(command_name, **options)
  File "/usr/local/lib/python2.7/site-packages/redis/connection.py", line 1071, in get_connection
    connection.connect()
  File "/usr/local/lib/python2.7/site-packages/redis/connection.py", line 543, in connect
    raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error 111 connecting to 0.0.0.0:6379. Connection refused.

我试着把主机改为redis,redis-master,实际的码头IP,一些找不到,还有一些连接被拒绝。

我已经建立了一个网络,但是哨兵无法彼此沟通。

我也尝试用配置文件启动Redis,但错误是找不到它。为此,我添加了WORKDIR并将其复制到Dockerfile中。

如何从Python (也在Docker内部)连接Redis?

谢谢您的时间,任何建议都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-29 07:37:48

要从python连接,从同一个compose文件连接到container中:

代码语言:javascript
复制
r = redis.StrictRedis(host='redis-master', port=6379, db=0)

所以您需要使用service名称

如果Python Container不是来自同一个compose file,则可以使用redis compose中的network连接它,并在python撰写文件中将其声明为external

使用docker run的示例

代码语言:javascript
复制
docker run -itd --network=MyNetworkFromTheOtherCompose busybox

使用compose的示例

代码语言:javascript
复制
networks:
  default:
    external:
      name: my-pre-existing-network-FromTheOtherCompose
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57705157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档