项目场景:
首先项目中使用vagrant 和docker ,docker中有mysql的容器。
问题描述
今天在连接数据库时,突然数据库服务挂掉。
没有截图,下文会进行文字分析。
原因分析:
首先想到是不是主机或者vagrant防火墙的问题
经过测试后发现,本机和vagrant 的ip都可以互相ping 通,说明不是二者防火墙的问题。
然后试着重启vagrant , 首先vagrant up启动虚拟机,此时报了一个内存不足的错,但我没有理会,大意了,没有闪,然后使用vagrant ssh连接docker。当我试着查看我docker 已启动的服务时,此时报了一个错,错误如下:
意思就是守护线程出问题了,但此时我又想到守护线程是服务于主线程的,那肯定是主线程出问题了。也就是服务压根没启动起来。
于是我试着重启docker ,发现重启失败,此处忘了截图。
我又尝试用systemctl status docker 查看docker状态也发现错误:
此处也无图,大概翻译过来就是,docker 启动失败,docker尝试重启,docker重启过于频繁。这里大概的意思就是尝试启动但启动失败。
然后我又使用df -h命令来查看使用状态
这个/dev/sdal原来是100%占用的。
于是我找到了这个位置
发现不能用cd的方式进入这个sdal。说明它不是个文件夹,看这个颜色就知道它不简单,后来查阅资料发现这个是个分区,无法进入。
那么问题就棘手了,我怎么知道哪个文件夹里面满了呢,这个满了的又进不去。
我突然想到vagrant与主机有一个挂载关系,简单说就是主机的一个位置与vagrant 的某个位置的一个对应关系。
这个对应关系的配置目录在
C:\Users\User\.vagrant.d\boxes\centos-VAGRANTSLASH-7\2004.01\virtualbox\Vagrantfile
打开这个文件配置如下:
Vagrant.configure("2") do |config|
config.vm.base_mac = "5254004d77d3"
config.vm.synced_folder ".", "/vagrant", type: "rsync"
end
config.vm.synced_folder ".", "/vagrant", type: "rsync"意思是将.目录挂载到vagrant中的/vagrant目录下。.的意思指的是整个C盘!!!怪不得,突然爆满,那么开始解决。
解决方案:
首先主机新建一个空文件夹替换掉配置文件中的.
我的如下:
Vagrant.configure("2") do |config|
config.vm.base_mac = "5254004d77d3"
config.vm.synced_folder "./MyVagrantSyncFolder", "/vagrant", type: "rsync"
end
然后找到虚拟机中vagrant文件夹,发现确实里面都是C盘中的东西。那么开始rm -rf 大法,删除再新建一个vagrant文件夹。然后重启服务。大功告成!