当我删除了.vagrant文件时,我该如何销毁虚拟机?

63

我删除了包含 .vagrant 文件的目录。当我启动一个新的虚拟机时,它会抱怨端口被占用。那么,没有 .vagrant 文件的情况下如何销毁虚拟机?


一个问题被分享了就变成了一半的问题:又遇到了同样的愚蠢问题,但幸好再次通过 Stack Overflow 得到了解决... - Benjamin R
4个回答

98
以下VirtualBox命令可能有所帮助。如果poweroff无效,请尝试使用unregistervm。
$ VBoxManage list runningvms
$ VBoxManage controlvm <uuid> poweroff
$ VBoxManage unregistervm <uuid>

来源:https://support.cloud.engineyard.com/entries/21449637-I-deleted-Vagrantfile-vagrant-and-or-the-app-directory-before-halting-the-VM-Now-ey-local-up-errors-

停止所有正在运行的虚拟机的Shell脚本:

VBoxManage list runningvms | awk '{print $2;}' | xargs -I vmid VBoxManage controlvm vmid poweroff

4
这些命令确实会摧毁虚拟机,但是它们仍会在“vagrant global-status”中保留该虚拟机的条目。 - Markus Miller
38
尝试使用命令vagrant global-status --prune。详情请参阅https://dev59.com/oWAf5IYBdhLWcg3woj7N#24446866 - Matt Gibson
1
在我的情况下,我使用了一种略微不同的方式:VBoxManage list vms; VBoxManage discardstate <uuid>; VBoxManage unregistervm <uuid> - nshew13
4
使用 vboxmanage unregistervm --delete 命令可以像使用 vagrant destroy 命令一样物理删除虚拟机。 - ens

31

最简单的方法是启动VirtualBox的图形用户界面客户端,然后删除(可能需要先关闭)虚拟机。您只需右键单击虚拟机并执行这些操作即可。

输入图像描述


4
如果您通过ssh连接到开发框或仅从命令行工作,则不需要使用GUI界面。此外,如果您将“alias killvms ='VBoxManage list runningvms | awk'{print $ 2;}'| xargs -I vmid VBoxManage controlvm vmid poweroff'”添加到配置文件中,您只需键入killvms即可关闭正在运行的虚拟机,而无需启动并等待GUI界面。 - Pickels
我假设开发人员通常在本地机器上使用Vagrant,并在后台运行GUI :) - Gerry
2
你的假设是错误的!但是因为你住得离我这么近,我就放过你这一次吧。嘻嘻,开个玩笑,对于在本地运行Vagrant的人来说,这仍然是一个很好的答案。 - Pickels

7
以下bash函数将关闭并销毁当前用户所有虚拟机相关的所有文件:
function killvms() {
  VBoxManage list runningvms | awk '{print $2;}' | xargs -I vmid VBoxManage controlvm vmid poweroff
  VBoxManage list vms | awk '{print $2;}' | xargs -I vmid VBoxManage unregistervm --delete vmid
}

将它添加到您的~/.bash_aliases中,然后通过killvms在您的shell中调用它。


0
如果您使用GUI删除了虚拟机,但仍然收到错误提示,您可以尝试从“%userprofile%\VirtualBox VMs”中删除该命名的虚拟机。这对我有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接