如何在 Linux 中删除过时的 Vagrant Box

您可能已经下载了多个版本的 Vagrant 盒子,其中一些可能已经过时了! 如果不再需要它们,您可以安全地删除 Linux 中过时的 Vagrant 框,如本简要指南中所述。

检查过时的 Vagrant 盒子

我一直在使用 流浪汉 过去几个月用于测试目的。 从 Vagrant 1.5 版开始,box 支持版本控制。 Box Versioning 允许制作 box 的开发人员推送更新或修复,而用户可以轻松更新底层 box。

如果一个盒子过期了,用户在启动 vagrant 环境时会收到通知 vagrant up 命令:

$ vagrant up

示例输出:

Bringing machine 'default' up with 'virtualbox' provider... ==> default: Checking if box 'generic/alpine38' version '3.1.16' is up to date... ==> default: A newer version of the box 'generic/alpine38' for provider 'virtualbox' is ==> default: available! You currently have version '3.1.16'. The latest is version ==> default: '3.1.22'. Run `vagrant box update` to update. ==> default: Clearing any previously set forwarded ports... ...
检查过时的 Vagrant 盒子

用户还可以使用手动检查当前 Vagrant 环境中的过时框 vagrant box outdated 命令:

$ vagrant box outdated

此命令将显示需要更新的框列表。

Checking if box 'generic/alpine38' version '3.1.16' is up to date... A newer version of the box 'generic/alpine38' for provider 'virtualbox' is available! You currently have version '3.1.16'. The latest is version '3.1.22'. Run `vagrant box update` to update.

如果要检查所有已安装的框,只需添加 --global 标志在最后:

$ vagrant box outdated --global

示例输出:

/usr/share/rubygems-integration/all/gems/vagrant-2.2.6/plugins/commands/box/command/outdated.rb:65: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call /usr/share/rubygems-integration/all/gems/vagrant-2.2.6/lib/vagrant/box.rb:124: warning: The called method `load_metadata' is defined here * 'oraclelinux/8' for 'libvirt' (v8.3.183) is up to date * 'oraclelinux/7' for 'virtualbox' is outdated! Current: 7.9.184. Latest: 7.9.185 * 'generic/alpine38' for 'virtualbox' is outdated! Current: 3.1.16. Latest: 3.1.22 * 'fedora33' for 'virtualbox' wasn't added from a catalog, no version information * 'archlinux/archlinux' for 'virtualbox' is outdated! Current: 20201215.11392. Latest: 20210115.13749 * 'archlinux/archlinux' for 'virtualbox' is outdated! Current: 20201201.10292. Latest: 20210115.13749 * 'Fedora33' for 'libvirt' wasn't added from a catalog, no version information

正如您在上面的输出中看到的,我有一些过时的盒子。

用户可以使用以下命令更新与当前 Vagrant 环境关联的框:

$ vagrant box update

上面的命令下载新版本的box并安装它。 所有下载的盒子都保存在 ~/.vagrant.d/boxes 主机系统中的目录。 旧版本的盒子将在同一位置保持可用,直到您从缓存文件夹中手动删除该 Vagrant 盒子。

您可以通过以下命令列出所有已安装的 Vagrant 框来验证是否:

$ vagrant box list

示例输出:

Fedora33            (libvirt, 0) archlinux/archlinux (virtualbox, 20201201.10292) archlinux/archlinux (virtualbox, 20201215.11392) fedora33            (virtualbox, 0) generic/alpine38    (virtualbox, 3.1.16) oraclelinux/7       (virtualbox, 7.9.184) oraclelinux/8       (libvirt, 8.3.183)
列出已安装的流浪箱

正如你在上面的输出中看到的,我有两个版本的 Arch Linux vagrant box。 无需保留两盒相同的操作系统。 所以让我们移除过时的 vagrant box。

删除过时的 Vagrant Box

您可以使用 vagrant box prune 命令删除 Linux 系统中过时的 Vagrant 框。

首先,让我们验证哪些框将被删除,哪些将保留 --dry-run 选项。 该选项用于 模拟命令 无需更改 Linux 系统中的任何内容。

$ vagrant box prune --dry-run

此命令实际上不会删除任何框,而只会打印将要删除的框。

示例输出:

The following boxes will be kept... Fedora33            (libvirt, 0) archlinux/archlinux (virtualbox, 20201215.11392) fedora33            (virtualbox, 0) generic/alpine38    (virtualbox, 3.1.16) oraclelinux/7       (virtualbox, 7.9.184) oraclelinux/8       (libvirt, 8.3.183)  Checking for older boxes... Would remove archlinux/archlinux virtualbox 20201201.10292

正如你在上面的输出中看到的,名为“的流浪框archlinux/archlinux virtualbox 20201201.10292” 将从您的系统中删除。

您现在知道要移除哪个盒子了。 如果对您来说没问题,只需运行相同的命令命令,而无需 --dry-run 选项:

$ vagrant box prune

此命令将保留当前更新的框并删除所有其他过时的框。

The following boxes will be kept... Fedora33            (libvirt, 0) archlinux/archlinux (virtualbox, 20201215.11392) fedora33            (virtualbox, 0) generic/alpine38    (virtualbox, 3.1.16) oraclelinux/7       (virtualbox, 7.9.184) oraclelinux/8       (libvirt, 8.3.183)  Checking for older boxes... Removing box 'archlinux/archlinux' (v20201201.10292) with provider 'virtualbox'... Vagrant-libvirt plugin removed box only from you LOCAL ~/.vagrant/boxes directory From libvirt storage pool you have to delete image manually(virsh, virt-manager or by any other tool)
删除过时的 Vagrant Box删除过时的 Vagrant Box

现在验证已安装的盒子列表:

$ vagrant box list Fedora33            (libvirt, 0) archlinux/archlinux (virtualbox, 20201215.11392) fedora33            (virtualbox, 0) generic/alpine38    (virtualbox, 3.1.16) oraclelinux/7       (virtualbox, 7.9.184) oraclelinux/8       (libvirt, 8.3.183)
查看已安装的流浪箱查看已安装的流浪箱

看? 现在它只显示了一个 archlinux vagrant box。 过时的框被删除。

prune 命令还有其他有用的选项。 您可以使用 -p, --provider 使用特定的 PROVIDER(例如 Virtualbox 或 libvirt)销毁盒子的选项。

-f, --force 即使盒子在使用中,标志也会在未经确认的情况下销毁。 这 -k, --keep-active-boxes 选项用于保持盒子仍在使用中。

要显示帮助部分,请运行:

$ vagrant box prune --help

Box VersioningDelete vagrant boxLinuxVagrantVagrant box虚拟化