问题描述

  • 本人最近在做一个的项目,使用VMware新装了Centos7虚拟机,在虚拟机里面用docker部署了MySQL、Redis、MQ等等组件以及各种微服务。

  • 第一天成功把这些东西部署,然后全部测试完也没什么问题,想着微服务开的比较多,然后工作结束后直接把虚拟机挂起(省得第二天要把其他微服务全部再Run一遍),结果第二天用Navicat连接Mysql死活连不上,想着不会Redis也连不上叭(没错也连不上了),但是其他微服务能正常使用,于是便开始排查问题!

    image-20240616135350074

    image-20240616135532981

问题排查

  1. 查了MySQL和Redis的日志,发现日志正常没什么问题。

  2. 重启MySQL容器,重试连接,同样连不上。

  3. 重启docker后,就能连上了。

  4. 重启虚拟机也能连上。

!!!(但我重启docker后,我其他的微服务就要再Run一遍)

解决办法

  • 开始在网上搜寻解决办法,发现大家的问题和我不太一样
  1. 于是我开始从虚拟机本机文件入手

    1
    vi /usr/lib/sysctl.d/00-system.conf 

    进入后文本如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Kernel sysctl configuration file
    #
    # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
    # sysctl.conf(5) for more details.

    # Disable netfilter on bridges.
    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0
  2. 在后面添加如下内容

    1
    net.ipv4.ip_forward = 1
  3. 保存退出,接着重启网络服务

    1
    systemctl restart network
  4. 重启以后,输入以下命令,查看IPv4转发状态

    1
    sysctl net.ipv4.ip_forward

    显示如下,则转发成功:

    1
    net.ipv4.ip_forward=1
  5. 再次挂起VMware,重试连接mysql和redis,就已经没问题了。

记录下这个问题,之后遇到相似问题方便查找!