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

290

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

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

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


我觉得我完全没有理解你的意思,因为我脑海中首先浮现的是 sudo find / -name lucid32.box - irrational John
3
也许它的名字不是那个。通配符搜索,比如 *.box 可能会有用?(顺便问一句,扩展名不应该是 .vbox 吗?) - irrational John
1
@CalvinCheng:我认为你误解了它只是一个.tar归档中的.vbox镜像。它确实是一个tar归档,但其中包含像box-disk1.vmdk、box.ovf和Vagrantfile这样的文件。我不知道这些文件具体如何用于创建VirtualBox使用的文件,但如果你打开VB的.vbox文件,你会发现它只是XML。我假设Vagrant将其文件(也是二进制和XML文件,加上Vagrantfile)转换为VirtualBox使用的XML和二进制文件。然而,如果你打开二进制文件,你会发现它们是不同的,所以这不是一个简单的untarring和重命名的问题。 - iconoclast
很荒谬,Vagrant仍然没有记录vagrant box add foo的作用。 - Cheeso
@Cheeso 鉴于Vagrant是用Ruby编写的,您可以从box_add.rb文件中很好地了解该命令的作用。在我的(Mac 10.9.5)系统中,它位于/Applications/Vagrant/embedded/gems/gems/vagrant-1.5.2/lib/vagrant/action/builtin/box_add.rb - Luke Peterson
显示剩余2条评论
8个回答

430

正如文档中所提到的,虚拟机镜像存储在以下位置:

  • Mac OS X 和 Linux: ~/.vagrant.d/boxes
  • Windows: C:/Users/USERNAME/.vagrant.d/boxes

1
啊,谢谢澄清。我一定是瞎了,没看到文档中的解释。 - Calvin Cheng
1
@manojlds:请看我在问题评论中关于 .vbox 文件的说明。它不是虚拟机本身,只是一个 XML 文件。 - iconoclast
38
你也可以使用环境变量VAGRANT_HOME来指定.vagrant.d的位置,例如VAGRANT_HOME=D:.vagrant.d(是的,在Windows中也适用)。 - Sven
7
在Windows的 C:\Users\{用户名}\.vagrant.d\boxes 目录下,我只发现了.vmdk文件,没有发现.box文件!! - Bilal
1
文档链接已损坏。 - Adrián Jaramillo
显示剩余2条评论

85

在 Mac/Linux 系统上,已成功下载的文件位于:

~/.vagrant.d/boxes

失败的方框位于:

~/.vagrant.d/tmp

在Windows系统中,它位于“用户”文件夹下:

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

希望这能有所帮助。谢谢。


12
不确定为什么这个回答被踩了。提供有关下载失败目的地的信息是有用的。 - Alex Coventry
1
~/.vagrant.d/boxes 不会存储 .box 文件本身,仅存储其内容。~/.vagrant/tmp 用于在下载时暂时存储 .box 文件,但在 Vagrant 安装后会被删除。 - Luke Peterson
1
第三行(适用于Windows)应为%userprofile%\.vagrant.d\boxes - J. Scott Elblein
2
这个答案是针对你真正关心硬盘空间的情况。 - kiltek
@kiltek 确实!我刚刚清理了vagrant.d/tmp文件夹,就已经腾出了20GB的空间。 - Willem Renzema

50

要更改路径,您可以将新的路径设置为名为VAGRANT_HOME的环境变量。

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

如果您希望将这些虚拟机映像放在另一个硬盘驱动器上,那么这可能是个好选择。

有关详细信息,请参阅文档:http://docs.vagrantup.com/v2/other/environmental-variables.html


20
一旦下载和盒子安装完成,Vagrant会删除实际的.box文件。如其他答案所述,在下载过程中,.box文件存储为:
~/.vagrant.d/tmp/boxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

文件名为'box'后跟40字节的十六进制哈希值。例如,在我的系统上,临时文件名为:

~/.vagrant.d/tmp/boxc74a85fe4af3197a744851517c6af4d4959db77f

据我所知,该文件从未以*.box扩展名保存,这就解释了为什么上述搜索无法找到它。检索实际的盒子文件有两种方法:
  1. 从vagrantcloud.com下载.box文件

    1. atlas上找到你感兴趣的box。例如,https://atlas.hashicorp.com/ubuntu/boxes/trusty64/versions/20150530.0.1
    2. 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
    3. 在URL末尾添加/providers/virtualbox.box。所以https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1变成了https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20150530.0.1/providers/virtualbox.box
    4. 保存.box文件
    5. 按照自己的需求使用.box文件,例如将其托管在自己的服务器上,并将config.vm.box_url指向该URL。或者
  2. 直接从Vagrant获取.box文件

    这需要您修改ruby源代码,以防止Vagrant在成功下载后删除.box文件。

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

      ensure # Make sure we delete the temporary file after we add it, # unless we were interrupted, in which case we keep it around # so we can resume the download later. if !@download_interrupted @logger.debug("Deleting temporary box: #{box_url}") begin box_url.delete if box_url rescue Errno::ENOENT # Not a big deal, the temp file may not actually exist end end

    3. 注释掉这个块。
    4. 使用vagrant add box <boxname>添加另一个.box文件。
    5. 等待下载完成。 您可以在~/.vagrant.d/tmp/目录下将其保存为boxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX文件。
    6. 将该文件重命名为更有用的名称。例如,mv boxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX trusty64.box

为什么你需要这个?

对我来说,这个工具非常有用,可以检索.box文件,以便将其托管在本地快速基础设施上,而不是从HashiCorp的Atlas盒子目录另一个盒子提供者下载。

这实际上应该成为默认的Vagrant功能,因为它具有非常明确的用例。


能否将 boxes 文件夹中的子文件夹压缩成一个可安装的盒子文件,例如 zip 或 tar 格式? - ThorSummoner
@ThorSummoner 是的,但在这种情况下,您可以让Vagrant处理它,例如通过vagrant package命令:http://docs.vagrantup.com/v2/cli/package.html。 - Luke Peterson

15

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

只需访问https://atlas.hashicorp.com/boxes/search,搜索您想要下载的.box文件。注意.box文件的URL,例如:

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

然后,您可以使用类似于以下的URL来下载这个.box文件:

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

我已经尝试并成功地下载了我需要的所有.box文件。希望这会有所帮助。


这是一个很好的发现!谢谢。;) - Luke Peterson
链接已失效 - 需要替换为:https://app.vagrantup.com。 - RtmY

6

在Windows操作系统下,此处位置为:C:\Users\\{username}\\.vagrant.d\boxes。我没有在互联网上找到任何相关文档,并且这对我来说并不是很明显。


那么 %userprofile%.vagrant.d\boxes 有效吗?%userprofile% 展开后为 c:\users{username}。 - TamusJRoyce

3
除了此外
Mac:
~/.vagrant.d/

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

为了进行干净的启动,您需要删除VirtualBox/OtherVMprovider中的文件。


0
在Windows 10上使用Vagrant 2.2.2,设置环境变量VAGRANT_HOME将确保下载的boxes存储在指定VAGRANT_HOME文件夹的子文件夹中。
在我的情况下,我将VAGRANT_HOME设置为e:\vagrant_home,boxes存储在e:\vagrant_home\boxes下。
这对我很有效。
这就是boxes存储的位置。虚拟机被创建在Virtual Box配置的文件夹中。要设置VirtualBox VM存储文件夹,请转到:VirtualBox GUI --> 文件 --> 首选项 --> 通用 --> 默认机器文件夹。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接