如何在 Linux 上刪除舊的 Vagrant Box


你可能已經下載了多個版本的 Vagrant 盒子,其中一些可能更舊!你可以在 Linux 上安全地刪除舊的 Vagrant 盒子。

檢查過時的流浪者盒子

我在用 流浪漢 在過去的幾個月裡,它已被用於測試目的。 從 Vagrant 1.5 版開始,box 支持版本控制。 Box 版本控制允許創建 Box 的開發人員推送更新或修復,並且用戶可以輕鬆更新底層 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)
列出已安裝的 vagrant crate

從上面的輸出可以看出,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)
顯示已安裝的 vagrant box顯示已安裝的 vagrant box

看?目前只顯示了 archlinux vagrant 框。已棄用的框已刪除。

這個 prune 該命令還有其他有用的選項。你可以使用它 -p, --provider 使用特定 PROVIDER(例如 Virtualbox 或 libvirt)銷毀盒子的選項。

這個 -f, --force 即使盒子正在使用中,標誌也會被丟棄而無需確認。這個 -k, --keep-active-boxes 繼續使用該框的選項。

要查看幫助部分,請運行:

$ vagrant box prune --help

盒子版本控制流浪盒子移除LinuxVagrant流浪盒子虛擬化