当前位置: 首页 > news >正文

本地访问不到公网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:

protected-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 *config-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

修改完文件后要记得重启docker中的redis:

docker restart 25069d824b89
或
docker restart redis
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 配置文件:

位置: 如果 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

重启 Docker 容器: 修改配置后,重启 Docker 容器以应用新配置:

docker restart <容器名或容器ID>

总结
如果你要修改的是物理机上的 Redis,直接在物理机上编辑配置文件 /www/server/redis/redis.conf。
如果你要修改的是Docker 容器中的 Redis,需要在 Docker 容器中编辑配置文件 /usr/local/etc/redis/redis.conf,并重启容器。
确保你编辑的是正确的配置文件并且正确重启了 Redis 服务或 Docker 容器,以确保更改生效。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Python】Python单元测试
  • Docker重启命令
  • stm32—中断机制
  • GSON转换将Long类型转换Double导致精度丢失的问题排查
  • Redis:查询是否包含某个字符/字符串之二
  • STM32-外部中断-AFIO-串口-串口通信-串口中断(空闲中断和接收中断)-printf移植-ADC数模转换-初始化和读取光敏电阻AO
  • Unity 使用 NewtonSoft Json插件报错
  • 基于华为的LTC流程体系,建立销售营销指标体系的探讨
  • YoloV8改进策略:Block改进|自研GroupxLSTM模块|即插即用(顶会专属)
  • react多级权限路由
  • 【云原生】Pass容器研发基础——汇总篇
  • 集合-List去重
  • jquery div触发粘贴事件
  • Linux驱动入门实验班——Hello驱动(后附百问网课程视频链接)
  • ARM CoreLink 系列 5.1.1 -- CI-700 System Address Map 】
  • CSS居中完全指南——构建CSS居中决策树
  • ES6系统学习----从Apollo Client看解构赋值
  • Git的一些常用操作
  • Gradle 5.0 正式版发布
  • JavaScript 基本功--面试宝典
  • Mysql数据库的条件查询语句
  • React系列之 Redux 架构模式
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vue学习第二天
  • 构建二叉树进行数值数组的去重及优化
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 如何合理的规划jvm性能调优
  • 一个SAP顾问在美国的这些年
  • 选择阿里云数据库HBase版十大理由
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​Redis 实现计数器和限速器的
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (javascript)再说document.body.scrollTop的使用问题
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (简单) HDU 2612 Find a way,BFS。
  • (十八)SpringBoot之发送QQ邮件
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四)汇编语言——简单程序
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (一)80c52学习之旅-起始篇
  • (一)python发送HTTP 请求的两种方式(get和post )
  • **PHP二维数组遍历时同时赋值
  • .ai域名是什么后缀?
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core中Emit的使用
  • .NET MVC之AOP
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .Net6 Api Swagger配置
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • ?