问题描述:
在使用 vagrant 创建好虚拟机,能正常用 vagrant up 启动和用 vagrant ssh 连接,并安装好 docker 的 MySQL 镜像之后发现刚开始运行时没有问题,可以正常连接到虚拟机的数据库。但是几天(猜测)后再使用 vagrant up 启动虚拟机会发现有报错,具体错误为:no space left on device. 然后 vagrant ssh 能够正常连接上虚拟机,但是就是一直连接不上 MySQL 数据库。
问题所在:
在问了度娘之后,发现问题出在用 Vagrant 创建的虚拟机文件目录和本机文件夹的映射之上:
Vagrant 创建的虚拟机里面会带上一个 /vagrant 的目录,在本机上可以指定一个文件夹(如 demo 文件夹)和这个文件夹进行映射,然后虚拟机就会自动将本机上 demo 文件夹里面的所有文件复制进虚拟机,方便我们进行文件的传输。
但是这里就存在一个问题,Vagrant 默认的文件映射目录是 Vagrantfile 文件所在的目录,但是作为初学者的我将 Vagrantfile 放在了 C:\Users\Administrator 这个目录之下,所以导致启动虚拟机以后虚拟机就默默地把 C:\Users\Administrator 里面的所有文件都复制进虚拟机里面的 /vagrant 目录里面,然后直接导致虚拟机内存爆满(我设置的虚拟机内存为40G,但是 C:\Users\Administrator 目录里面的文件有50G),直接就不能使用了。
解决办法:
- 删除虚拟机里面 /vagrant 目录里面的所有文件。
1).使用sudo -i
将当前用户(vagrant)切换到 root 用户。
原因:因为 vagrant ssh 连接虚拟机之后的默认用户为 vagrant ,vagrant 用户没有删除 /vagrant 文件夹里面文件的权限。
2).进入到 /vagrant 目录使用rm -rf *
删除当前目录下的所有文件(更建议用rm -rf 具体文件或者目录
)来进行删除,虽然慢点,但至少安全!
注意:千万要先进入 /vagrant 目录下再使用rm -rf *
命令,要不然可能会删掉虚拟机里面所有的文件,就得重新弄一个虚拟机了。 - 关闭虚拟机。
- 进入 C:\Users\Administrator\.vagrant.d\boxes\centos-VAGRANTSLASH-7\2004.01\virtualbox 文件目录下找到 Vagrantfile 文件,将里面的
config.vm.synced_folder ".", "/vagrant", type: "rsync"
修改为config.vm.synced_folder "./自己在C:\Users\Administrator里面新建的一个空目录", "/vagrant", type: "rsync"
.
这里自己在C:\Users\Administrator里面新建的一个空目录即为配置的 Vagrant 虚拟机的映射目录。 - 然后执行命令
vagrant reload
命令再重新加载配置文件就可以了 - 这样配置了之后,以后我们想传文件到虚拟机里面直接将想要传输的文件放到我们配置的映射目录里面就好了。
参照的大佬博客:
使用Vagrant 后发现虚拟机磁盘空间爆满的血泪填坑记