你可能已经下载了几个版本的 Vagrant box,其中一些可能已经过时了! 如果不再需要它们,您可以按照本简短指南中的说明安全地删除 Linux 中过时的 Vagrant 框。
检查过时的流浪者盒子
我一直在使用 流浪汉 过去几个月用于测试目的。 从 Vagrant 1.5 版开始,盒子支持版本控制。 Box Versioning 允许制作盒子的开发人员推送更新或修复,以及用户轻松更新底层盒子。
如果某个框已过期,用户将在启动 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 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 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 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
command 还有其他有用的选项。 您可以使用 -p
, --provider
使用特定 PROVIDER(例如 Virtualbox 或 libvirt)销毁盒子的选项。
这 -f
, --force
即使盒子正在使用,标志也会在没有确认的情况下销毁。 这 -k
, --keep-active-boxes
选项用于保持盒子仍在使用中。
要显示帮助部分,请运行:
$ vagrant box prune --help