更新记录: 此问题已被Vagrant官方解决,在版本2.2.19中,安装后默认就在个人用户目录下创建了MyVagrantSyncFolder文件夹,

并提示:Rsyncing folder: /cygdrive/c/Users/nioth/MyVagrantSyncFolder/ => /vagrant

 

 

现象: 

用了几天vagrant后,发现docker 里的 Mysql5.7 服务无法启动,用docker ps 命令,发现mysql一直在反复重启, 查看mysql log 发现说磁盘空间不够, 导致mysql无法启动。

觉得很奇怪, docker里只安装了redis和mysql两个image, 也没用几天mysql, 怎么会40G的空间都满了?

 

于是一通百度查找, 都说是mysql日志过多,但是一个一个目录的用du -sh * 和 df -h 查看, 发现日志log并不大。 进一步查找发现是/var/lib/docker/overlay2下面的子目录里有文件过大,于是

开始陷入了坑里, 一直怀疑是docker的问题, 但是网上的办法都说是log文件占用空间,使用 cat /dev/null > *-json.log 删除, 结果发现毫无卵用。

实在无法解决,忍痛将docker的images全部删掉看看, 结果发现还是没用。。。

 


转机:

经过几个小时的死磕,终于发现了一个文件夹: /vagrant/AppData, 这个文件夹居然有32G? 再一细看不得了, 这个/vagrant下除了AppData文件夹,怎么还有一堆文件感觉跟我的PC电脑

里的 user文件夹里的东西一模一样? 比如有 download ,  有document, 有music , 还有OneDrive, 虚拟机上怎么可能有微软的OneDrive? 于是突然灵光一现,难道vagrant把我电脑里的

文件都复制到虚拟机里了? 顺着这个思路百度,果然柳暗花明又一村,彻底找到了问题所在,那就是:

 

vagrant提供了将本机目录挂载到虚拟机目录下的功能,默认是将vagrant配置文件所在目录挂载到虚拟机/vagrant目录下。


即: c:\user\nioth(这里是我电脑的用户名,你可以改成你的)\Vagrantfile  所在的目录  与 虚拟机 /vagrant目录进行同步, 

 

因此, 会将本机大量文件复制到虚拟机, 导致虚拟机空间爆满。 并不是docker的问题啊, 可怜我把docker里的image都删掉了,回头又得重装mysql,配置一堆数据库,郁闷啊~~~

 

 

 

解决办法:

 

一开始找到的是 C:\Users\nioth\Vagrantfile 文件里有一行配置(默认是注释掉的):

  #config.vm.synced_folder ".", "/vagrant_data"

 

于是修改这个文件,改成下面(MyVagrantSyncFolder是自己新建得文件夹,空的,放在C:\Users\nioth\下面):

(这里有一个失败的伏笔:为什么我看到虚拟机里的文件夹是叫vagrant,并不是叫vagrant_data啊。不管了,试试再说。)

 

  config.vm.synced_folder "./MyVagrantSyncFolder", "/vagrant_data"

 

再用vagrant reload 重启, 果然发现没有用,心里一紧,不会吧, 再用Everything软件搜一遍,发现另外还有一个地方有一个vagrant配置文件:

 

C:\Users\nioth\.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

 ( 话说configure("2")是什么鬼? 没有1吗? )

 

 终于找到你了! 

 于是,修改为:

 

Vagrant.configure("2") do |config|

  config.vm.base_mac = "5254004d77d3"

  config.vm.synced_folder "./MyVagrantSyncFolder", "/vagrant", type: "rsync"

end

  

(原来那个文件里的配置还给它注释掉,恢复原样。)

 

保存文件,再用vagrant reload, 大功告成!

控制台显示:

==> default: Configuring and enabling network interfaces...

==> default: Rsyncing folder: /cygdrive/c/Users/nioth/MyVagrantSyncFolder/ => /vagrant

==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`

==> default: flag to force provisioning. Provisioners marked to run always will still run.

 

现在是 ./MyVagrantSyncFolder 文件夹与 虚拟机中的/vagrant文件夹进行映射, 这样就不会将大量主机文件复制到虚拟机了。