IDEA springboot 连接虚拟机docker搭建的redis集群连接超时问题 connection timed out: /172.172.0.4:6379

我在电脑上面运行虚拟机,在虚拟机使用docker来搭建redis集群,在本地使用IDEA 创建springboot项目连接redis集群,在 set 时出现连接超时的情况

 

最开始以为是防火墙的问题,然后我关闭了,虚拟机和docker容器的防火墙后,依然包这个错。最开始不是很理解,因为确实做了端口映射为什么访问不到呢?

但是不连接集群,连接一个普通的docker里面的单点redis服务又能连接上。在网上看了很久都没有找到解决办法。

然后注意到这里的报错信息

2022-11-30 11:58:16.109  WARN 19164 --- [ioEventLoop-4-3] i.l.core.cluster.RedisClusterClient      : connection timed out: /172.172.0.4:6379
2022-11-30 11:58:17.112  WARN 19164 --- [ioEventLoop-4-4] i.l.core.cluster.RedisClusterClient      : connection timed out: /172.172.0.6:6379
2022-11-30 11:58:18.116  WARN 19164 --- [ioEventLoop-4-5] i.l.core.cluster.RedisClusterClient      : connection timed out: /172.172.0.5:6380
2022-11-30 11:58:19.119  WARN 19164 --- [ioEventLoop-4-6] i.l.core.cluster.RedisClusterClient      : connection timed out: /172.172.0.4:6380
2022-11-30 11:58:20.121  WARN 19164 --- [ioEventLoop-4-7] i.l.core.cluster.RedisClusterClient      : connection timed out: /172.172.0.5:6379
2022-11-30 11:58:21.127  WARN 19164 --- [ioEventLoop-4-8] i.l.core.cluster.RedisClusterClient      : connection timed out: /172.172.0.6:6380

 感觉这个ip有点怪,本地的IDEA直接访问的容器内部的ip,因为没有做路由,而且这个docker网段还是自己创建的用来给docker容器分配静态ip。

然后在本地 ping 了一下这个ip确实ping不通,初步确认就是这个原因

 

解决办法:在本地添加路由,对容器的访问通过虚拟机来进行路由:

route -p add 172.172.0.0 mask 255.255.255.0 192.168.56.133

 

这里的 ip 信息可以在虚拟机中使用 ifconfig 进行查看

配置好后,来ping一下,发现可以ping通

本地运行的 springboot 可以正常连接redis集群

本人菜鸟一枚,如果有说的不好或者有错误的地方希望大家可以提出来。

我自己在这里也还有疑问,为什么连接docker容器中单点的redis可以正常使用,连接集群就请求超时呢?最开始以为是防火墙的原因,因为自己做了端口映射,但是把防火墙关闭后还是无法连接docker搭建的redis集群,希望有大佬可以讲解一下!哈哈哈。

 

 

 

在 IntelliJ IDEA 连接虚拟机Docker 容器里的 MySQL 出现 'Connection timed out: connect' 错误,可从以下几个方面排查并解决: ### 网络连通性 - **虚拟机网络**:要保证主机和虚拟机网络是连通的。可以使用 `ping` 命令来测试,例如在主机的命令行输入 `ping <虚拟机 IP>`,若能正常收到回复,就表明网络基本是通的。 - **容器端口映射**:确认 Docker 容器中的 MySQL 端口已经正确映射到虚拟机的端口。可以使用 `docker ps` 命令查看容器的端口映射情况,示例如下: ```bash docker ps ``` 确保 MySQL 容器的端口(默认 3306)已经正确映射到虚拟机的某个端口。 ### MySQL 配置 - **允许远程连接**:要保证 MySQL 配置允许远程连接。可以通过修改 MySQL 的配置文件 `my.cnf` 或者 `my.ini` 来实现,在文件中找到 `bind-address` 这一行,将其值改为 `0.0.0.0`,这样就能允许任何 IP 地址连接。修改完成后,重启 MySQL 服务。 ```ini bind-address = 0.0.0.0 ``` - **用户权限**:确保用于连接的 MySQL 用户具有远程连接的权限。可以使用以下 SQL 语句来为用户授予远程连接权限: ```sql GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES; ``` ### 防火墙设置 - **虚拟机防火墙**:检查虚拟机的防火墙是否阻止了 MySQL 端口的访问。可以临时关闭防火墙来测试,例如在 CentOS 系统中可以使用以下命令: ```bash systemctl stop firewalld ``` 若关闭防火墙后可以正常连接,就需要配置防火墙规则,开放 MySQL 端口。 ```bash firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload ``` - **主机防火墙**:同样要检查主机的防火墙是否阻止了对虚拟机的访问,确保主机能够访问虚拟机的 MySQL 端口。 ### IDEA 配置 - **连接配置**:确认 IntelliJ IDEA 中的数据库连接配置信息是否正确,包括主机地址、端口、用户名和密码等。
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值