您可能已经下载了多个版本的 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 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 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虚拟化