Vagrant 将其 .box 文件下载到哪里?

Posted

技术标签:

【中文标题】Vagrant 将其 .box 文件下载到哪里?【英文标题】:Where does Vagrant download its .box files to? 【发布时间】:2012-04-26 16:41:59 【问题描述】:

执行以下命令后.box文件会发生什么?

vagrant box add lucid32 http://files.vagrantup.com/lucid32.box

下载完成后在文件系统中找不到lucid32.box文件。

【问题讨论】:

我想我完全没有理解你的意思,因为我首先想到的是sudo find / -name lucid32.box 正是我所做的,但我一定错过了一些东西,因为我无法使用这个确切的命令找到lucid32.box... 可能不存在该名称。诸如*.box之类的通配符搜索可能吗? (顺便说一句,扩展名不是.vbox吗?) 是的,你是对的。搜索应为*.vboxnot *.box。谜团已揭开。 :-) 您想输入答案以便我接受吗?谢谢! @CalvinCheng:我认为您误认为它只是 tar 存档中的 .vbox 图像。它确实是一个 tar 存档,但它包含 box-disk1.vmdk、box.ovf 和 Vagrantfile 等文件。我不知道它们是如何用来创建 VirtualBox 使用的文件的,但是如果你打开 VB 的 .vbox 文件,你会发现它只是 XML。我假设 Vagrant 将其文件(也是二进制和 XML 文件,加上 Vagrantfile)转换为 VirtualBox 使用的 XML 和二进制文件。然而,如果你打开二进制文件,你会发现它们是不同的,所以这不是解压缩和重命名的简单问题。 【参考方案1】:

在带有 Vagrant 2.2.2Windows 10 上,设置环境变量 VAGRANT_HOME 将确保将框下载到为 VAGRANT_HOME 指定的文件夹的子文件夹中.

在我的例子中,我将VAGRANT_HOME 设置为e:\vagrant_home,并且这些盒子存储在e:\vagrant_home\boxes 下。

这对我有用。

这就是 盒子 的存储位置。 虚拟机正在 Virtual Box 中配置的文件夹中创建。要设置 VirtualBox 虚拟机存储文件夹,请访问:VirtualBox GUI --> File --> Preferences --> General --> Default Machine Folder

【讨论】:

【参考方案2】:

除了

Mac:
~/.vagrant.d/

Windows:
C:\Users\%userprofile%\.vagrant.d\boxes

您必须删除 VirtualBox/OtherVMprovider 中的文件才能重新开始。

【讨论】:

【参考方案3】:

在Mac/Linux系统上,下载成功的盒子位于:

~/.vagrant.d/boxes

和不成功的盒子位于:

~/.vagrant.d/tmp

在 Windows 系统上,它位于用户文件夹下:

C:\Users\%userprofile%\.vagrant.d\boxes

希望这会有所帮助。谢谢

【讨论】:

不知道为什么这被否决了。有关不成功下载目的地的信息很有用。 ~/.vagrant.d/boxes 从不存储 .box 文件本身,只存储它的内容。 ~/.vagrant/tmp 用于在下载时临时存储 .box,但在 Vagrant 中安装时会被删除。 第三行(对于 Windows)应该是 %userprofile%\.vagrant.d\boxes 此答案适用于您真正关心硬盘空间的情况。【参考方案4】:

下载和安装完成后,实际的.box 文件会被 Vagrant 删除。如其他答案所述,在下载时,.box 文件存储为:

~/.vagrant.d/tmp/boxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

其中文件名是“box”,后跟一个 40 字节的十六进制散列。例如,我系统上的一个临时文件是:

~/.vagrant.d/tmp/boxc74a85fe4af3197a744851517c6af4d4959db77f

据我所知,此文件从未以*.box 扩展名保存,这解释了为什么上面的搜索未能找到它。有两种方法可以获取实际的 box 文件:

    从 vagrantcloud.com 下载 .box 文件

      在the atlas 上找到您感兴趣的盒子。例如, https://atlas.hashicorp.com/ubuntu/boxes/trusty64/versions/20150530.0.1 将域名替换为vagrantcloud.com。所以https://atlas.hashicorp.com/ubuntu/boxes/trusty64/versions/20150530.0.1 变为https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1/providers/virtualbox.box。 将/providers/virtualbox.box 添加到该URL 的末尾。所以https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1变成https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1/providers/virtualbox.box 保存 .box 文件 根据需要使用 .box,例如,自己托管它并将 config.vm.box_url 指向 URL。

    直接从 Vagrant 获取 .box

    这需要你修改ruby源,以防止Vagrant在下载成功后删除框。

      在 Vagrant 安装目录中找到 box_add.rb 文件。在我的系统上,它位于/Applications/Vagrant/embedded/gems/gems/vagrant-1.5.2/lib/vagrant/action/builtin/box_add.rb 找到 box_add 函数。在box_add 函数中,有一个块读取:

      确保 # 确保我们在添加后删除临时文件, # 除非我们被打断,在这种情况下我们会保留它 # 这样我们就可以稍后继续下载。 如果 !@download_interrupted @logger.debug("正在删除临时框:#box_url") 开始 box_url.delete 如果 box_url 拯救 Errno::ENOENT # 没什么大不了的,临时文件可能实际上并不存在 结尾 结束

      将此块注释掉。 使用vagrant add box <boxname>添加另一个框。 等待下载。 您可以观看它作为boxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 文件保存在~/.vagrant.d/tmp/ 目录中。 将文件重命名为更有用的名称。例如,mv boxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX trusty64.box

你为什么要这个?

对我来说,这对于检索 .box 文件很有用,因此它可以托管在本地、快速的基础架构上,而不是从 HashiCorp's Atlas box catalog 或 another box provider 下载。

这确实应该是默认 Vagrant 功能的一部分,因为它有一个非常明确的用例。

【讨论】:

是否可以点赞、压缩或压缩 box 文件夹中的子文件夹以创建可安装的 box 文件? @ThorSummoner 是的,但你也可以让 Vagrant 在这种情况下处理它,例如,通过vagrant package 命令:docs.vagrantup.com/v2/cli/package.html【参考方案5】:

在 Windows 上,可以在此处找到该位置。我没有在互联网上找到任何文档,这对我来说并不是很明显:

C:\Users\\username\\.vagrant.d\boxes

【讨论】:

那么 %userprofile%\.vagrant.d\boxes 有效吗? %userprofile% 扩展为 c:\users\username【参考方案6】:

正如the docs 中提到的,盒子存储在:

Mac OS X 和 Linux:~/.vagrant.d/boxes 窗口:C:/Users/USERNAME/.vagrant.d/boxes

【讨论】:

啊。感谢您的澄清。我一定是瞎了眼,错过了文档中的解释。 @manojlds:请参阅我对问题的评论:.vbox 文件。它本身不是 VM,它只是一个 XML 文件。 Windows 操作系统上的相同位置? 您也可以使用环境变量 VAGRANT_HOME 来指定 .vagrant.d 的位置,如 VAGRANT_HOME=D:\.vagrant.d (是的,它也适用于 Windows)。 在 Windows 上的 C:\Users\username\.vagrant.d\boxes 中,我只找到了 .vmdk 文件而不是 .box !!【参考方案7】:

@Luke Peterson:有一种更简单的方法来获取 .box 文件。

只需转到https://atlas.hashicorp.com/boxes/search,搜索您要下载的盒子。注意盒子的 URL,例如:

https://atlas.hashicorp.com/ubuntu/boxes/trusty64/versions/20150530.0.1

然后你可以使用这样的 URL 下载这个盒子:

https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1/providers/virtualbox.box

我尝试并成功下载了我需要的所有盒子。希望有所帮助。

【讨论】:

这是一个很棒的发现!谢谢你。 ;) 链接现已损坏 - 需要替换为:app.vagrantup.com。【参考方案8】:

要更改路径,您可以为环境变量设置一个新路径,名为: VAGRANT_HOME

export VAGRANT_HOME=my/new/path/goes/here/

如果您想将这些 vagrant-Images 放在另一个 HDD 上,那可能会很好。

文档中的更多信息:http://docs.vagrantup.com/v2/other/environmental-variables.html

【讨论】:

以上是关于Vagrant 将其 .box 文件下载到哪里?的主要内容,如果未能解决你的问题,请参考以下文章

vagrant 本地添加box 支持带版本号

vagrant网站中box下载方法

vagrant 添加带版本号的 box

如何将所有 *.dev 路由到 vagrant box 上的子文件夹

vagrant box php centos 选 哪个

vagrant 导入已导出的包