环境
- 操作系统:CentOS 7
- 数据库:Msql 8.0
- Docker版本:20.10
问题
生产环境、预发环境、所有验证码都裂开
分析及解决
发现请求验证码的接口状态一直在pending,想到验证码是要往数据库中写入存储,使用navicat连接数据库发现,正常连接,XShell连接服务器,由于数据库使用docker运行 查看在运行容器及大小
代码语言:javascript复制docker ps -s
在正常运行,心想重启一下dokcer中数据库容器,于是重启容器
代码语言:javascript复制docker restart 容器名称
重启之后发现navicat都连接不上了,本来还能连接,使用telnet命令ping一下服务器数据库端口,发现ping通,回到服务器,尝试重启docker
代码语言:javascript复制systemctl restart docker
docker重启之后,由于创建容器时设置了docker重启会自动启动,查看发现数据库容器正常启动,再次ping端口,发现仍然ping不通,有点着急了,自己观察发现在运行容器的PORTS列为空!也就是说docker启动容器之后并没有映射端口,于是去网上搜索,查看docker 容器的网络配置
代码语言:javascript复制docker inspect 容器名或容器id|grep IPAddress
输出结果中:IPAddress 为空!果然docker网络配置出现了问题
查看docker的虚拟网络
代码语言:javascript复制docker network ls
输出结果正常
重置docker网络
停止docker服务
代码语言:javascript复制systemctl stop docker
关闭docker相关网卡设备
代码语言:javascript复制ip link set docker0 down
删除 docker0桥接设备
代码语言:javascript复制brctl delbr docker0
如果提示:brctl command not fount 安装brctl
代码语言:javascript复制yum install bridge-utils -y
最后再次启动docker服务,然后启动你的容器
代码语言:javascript复制systemctl start docker
访问发现,数据库正常连接,验证码正常出来,但是!没过两分钟,前端就告知验证码又没了,想了想不应啊,查看服务器磁盘内存发现磁盘内存使用率100%!应该是磁盘内存不够写不进去吧, 查看服务器磁盘内存
代码语言:javascript复制df -h
查看当前路径下大文件
代码语言:javascript复制du -sh *
查看指定路径下文件大小
代码语言:javascript复制du -h /root
找到几个无用的大文件,删除之后发现验证码恢复正常,后续改进可以把验证码缓存到Redis中。