开发者

本地访问不到公网redis的解决方案

开发者 https://www.devze.com 2024-08-15 08:57 出处:网络 作者: 坚持不懈的ape
目录一、目前情况二、解决方案方案一方案二 !!!(重要)容器与数据卷的对应关系1.更改容器中的Redis的配置文件2 更改服务器物理机上的redis的配置文件重新描述一下1. 服务器上的物理机 Redis2. docker 容器中的 Redi
目录
  • 一、目前情况
  • 二、解决方案
    • 方案一
    • 方案二 !!!(重要)
  • 容器与数据卷的对应关系
    • 1.更改容器中的Redis的配置文件
    • 2 更改服务器物理机上的redis的配置文件
  • 重新描述一下
    • 1. 服务器上的物理机 Redis
    • 2. docker 容器中的 Redis
  • 总结

    一、目前情况

    首先

    我用的公网ip,即服务器地址是:106.14.xx.xx

    由于我的redis是放到了服务器的docker容器中,

    而端口映射是主机–>容器是:6380–>6379/tcp

    所以在访问redis时,我需要访问的是

    host:106.14.xx.xx

    port:6380

    因为肯定是要访问公网的,访问6380端口通过映射到docker中redis用的6379端口。

    二、解决方案

    方案一

    我这里出现了一个问题,通过可视化工具根本连接不上redis数据库,所以考虑是配置文件中是否不允许外网的ip来访问【也可能是端口没在安全组?】。

    所以我通过下面的语句,对服务器上的redis的配置文件进行了更改【进入的方式请看 容器与数据卷的对应关系这一节】,将原来的

    bind 127.0.0.0
    

    改成了:

    bind 0.0.0.0
    

    并且将下面的控制改成了no:

    prandroidotected-mode no
    

    方案二 !!!(重要)

    经过上面一顿折腾,终于报错变了:

    Redis Client On Error: ReplyError: NOAUTH Authentication required. Config right?
    

    说明要验证身份!

    这里最关键的一点就是,明明两个配置文件中都没有给redis配置密码,

    即配置文件都是:

    通过grep 'requirepass' /var/data/redis/redis.conf

    显示# requirepass foobared说明唯一写密码的地方,也被注释掉了。

    那为什么没有密码还要验证身份呢??!!

    可能是因为 Redis 在启动时使用了不同的配置文件,或者在启动容器时通过命令行参数或环境变量设置了密码

    (1) 关键!!检查通过启动命令行参数设置了密码这种情况,你需要通过下面的语句进行排查:

    docker inspect --format='{{.Config.Cmd}}' redis
    

    如果出现了:

    [-- requirepass xxxxxx-- appendonly yes]
    

    说明Redis 容器确实是通过启动命令行参数设置了密码 requirepass xxxxxx。这意味着即使在 redis.conf 文件中没有设置密码,Redis 也会使用这个命令行参数指定的密码(后面带着这个密码再访问,就可以正常连接公网上的redis了)。

    (2) 检查 Redis 配置文件路径 (这一个地方可能不太对)

    确认容器中的 Redis 实际使用的是哪个配置文件。有可能 Redis 使用的并不是 /usr/local/etc/redis/redis.conf 文件。

    redis-cli CONFIG GET *confi编程客栈g-file*
    

    如果出现了:

    1) "cluster-config-file"
    2) "nodes.conf"编程
    

    说明确实,之前改动配置文件是徒劳的,因为redis根本没有用那个配置文件。

    容器与数据卷的对应关系

    1.更改容器中的redis的配置文件

    因为我的容器中的目录与数据卷(服务器上地址)的对应关系:

    容器中的目录 ----》 数据卷(服务器上地址)

    /usr/local/etc/redis ----》 /var/data/redis

    /data ----》 /var/data/redis/data

    所以此时我直接在服务器上访问容器中的redis的配置文件(或者进入docker,再进入docker的目录对配置文件进行更改):

    [root@iZuf67k70ucx14s6zcv54dz var]# 
    vi /var/data/redis/redis.conf
    

    2 更改服务器物理机上的redis的配置文件

    我这里是通过:

    sudo vi /www/server/redis/redis.conf
    

    即可进入物理机上redis的配置文件。

    同样修改完后,要进行重新启动:

    sudo systemctl restart redis
    

    重新描述一下

    1. 服务器上的物理机 Redis

    如果你需要修改服务器上物理机的 Redis 配置文件:

    位置: 根据你之前的信息,配置文件的位置可能是 /www/server/redis/redis.conf。

    操作: 直接在物理机上编辑这个文件,确保 bind 配置项是:

    bind 0.0.0.0
    

    重启 Redis: 修改后,重启 Redis 使配置生效。你可以通过服务管理工具(如 systemctl 或 service)来重启:

    sudo systemctl restart redis
    

    2. Docker 容器中的 Redis

    如果你需要修改 Docker 容器中的 Redis 配置文件:

    位置: javascript如果 Docker 容器中的 Redis 使用 /usr/local/etc/redis/redis.conf,你需要在这个路径下编辑配置文件。

    操作: 如果文件在 Docker 容器中,首先进入容器:

    docker exec -it <容器名或容器ID> bash
    

    然后使用 vi 或其他编辑工具修改文件:

    vi /usr/local/etc/redis/redis.conf
    

    将 bind 配置项改为:

    bind 0.0.0.0
    

    重启 Dock编程客栈er 容器: 修改配置后,重启 Docker 容器以应用新配置:

    docker restart <容器名或容器ID>
    

    总结

    如果你要修改的是物理机上的 Redis,直接在物理机上编辑配置文件 /www/server/redis/redis.conf。

    如果你要修改的是Docker 容器中的 Redis,需要在 Docker 容器中编辑配置文件 /usr/local/etc/redis/redis.conf,并重启容器。

    确保你编辑的是正确的配置文件并且正确重启了 Redis 服务或 Docker 容器,以确保更改生效。

    以上就是本地访问不到公网redis的解决方案的详细内容,更多关于本地访问不到redis的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号