解决docker容器内无法连接宿主redis

背景 小程序的发短信服务挂了,随查看日志,该报错日志如下

在这里插入图片描述

Error 111 connecting to 127.0.0.1:6379. Connection refused.

6379是监听redis服务的端口,那大概是redis出错了。

首先查看了redis是否正常启动,检查出服务正常。

由于小程序是部署在docker内,而redis是安装在宿主主机内。

于是简单写了个demo测试是否能连接redis

import redis

try:
    # 创建Redis连接
    r = redis.Redis(host='127.0.0.1', port=6379)

    # 测试连接
    response = r.ping()
    if response:
        print("成功连接到Redis服务器")
    else:
        print("无法连接到Redis服务器")

except redis.exceptions.ConnectionError as e:
    print("连接错误:", str(e))

结果显示,在容器外可以正常连接redis,但是在容器内无法连接容器

这个原因大概是我们可以简单把docker当作是一个虚拟机,容器内外是两套系统。

那知道了原因,解决起来就比较迅速了。

首先,找到docker的虚拟IP

通过命令ifconfig

在这里插入图片描述

把这个虚拟IP加入到redis配置中

找到redis.config

然后修改如下地方

找到bind 127.0.0.1这一行,修改如下

bind 127.0.0.1 172.17.0.1

修改保护模式

protected-mode 设置为no

这个保护模式可能会不生效,报错结果如下

在这里插入图片描述

那么则进入redis中修改保护模式,把保护模式设置为No即可

在这里插入图片描述

另连接redis时,需要用docker的虚拟IP

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/2694caace4.html