如何在从文件系统中删除 Vagrant 盒子之后,从全局状态(global-status)中移除该盒子?

88
我在意识到一个正在运行的 Vagrant 虚拟机时误删了包含它的文件夹。现在该如何从 Vagrant (global-status) 中删除它呢?虚拟机已经被我从 Virtualbox 中卸载了。

1
无论Vagrant虚拟机是否正在运行都没有关系(我最近发现了这一点)。即使虚拟机已停止,如果您手动删除其文件而不是运行“vagrant destroy”,“vagrant global-status”仍将报告“主机状态未知”的问题。 - John Berberich
5个回答

204
为了删除在 vagrant global-status 列出的旧虚拟机 (例如,您已从文件系统中删除包含 .vagrant 目录的文件夹),您只需运行以下命令:
vagrant global-status --prune

你可能需要直接从你的提供商 (VMWare、Virtualbox,等等) 控制界面中删除虚拟机。

我自己制造了问题:我从提供商中删除了虚拟机的文件,并且还更改了Vagrantfile,以便该虚拟机不再是项目Vagrant配置的一部分。 --prune选项也适用于我的情况。谢谢! - John Berberich
它只在我已经运行的 Vagrant 虚拟机内部工作。 - Nikos Alexandris
2
对我没用。我不得不手动编辑~/.vagrant.d/data/machine-index并删除有问题的条目。 - Dalin
这对我的情况起作用了。如果您更改了计算机名称,并且旧名称(不再起作用)仍然在vagrant global-status中列出。 - Dayron Gallardo

6
我相信全局数据的新文件名是~/.vagrant.d
因此,您可以运行rm -r ~/.vagrant.d来删除所有用户数据以重新开始。

0

在 Windows 机器上,以上命令未能移除我的旧盒子。我已经从 virtualbox 提供者文件夹中删除了 .vagrant 文件夹和盒子,但是该盒子仍然出现在 vagrant global-status list 中。

正如通过 vagrant up 命令所提到的评论:

If you believe this message is in error, please check the process
listing for any "ruby" or "vagrant" processes and kill them. Then
try again.

于是我从进程列表中终止了 ruby.exe,并进行了随后的 vagrant global-status --prune 操作。


0
对于我的情况:厨房和.kitchen/文件夹可能包含由Vagrant创建的隐藏文件。
$ kitchen create

我需要更进一步,超越厨房销毁或虚拟机销毁,甚至是从vagrant global-status返回的vagrant destroy machineID(该命令会列出您用户空间中的vagrant实例列表)。

在我的情况下,我必须清除包含在用户的.vagrant隐藏目录中的vagrant机器锁定文件。

$ rm -r ~/.vagrant/data

在我的情况下,我需要使用sudo执行上述命令。

然后我终于得到了一个干净的结果。

$ vagrant global-status

列表


0

首先使用 vagrant global-status 列出所有 Vagrant 虚拟机及其状态和 ids

然后可以使用:

 vagrant destroy -f the_id_of_the_machine

之后,如果您再次运行vagrant global-status命令,您会发现您在vagrant destroy -f命令中指定的ID已从列表中删除。

然后,您可能需要重新启动计算机。但是这些命令不会影响您的虚拟机。


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