使用自定义Vagrantfile打包基本框

时间:2013-02-13 19:37:33

标签: virtualbox vagrant

我有一个特定的Vagrantfile用于lucid32盒子,它安装了一些非常标准的软件包(PHP / MySQL / Apache),做了一些特定的端口转发等等,我设置它,从git签出一个项目并更改一些服务器配置,我想将此框打包给团队中的其他开发人员使用,所以我使用命令:

vagrant package boxname --output test.box --vagrantfile Vagrantfile

我得到一个test.box文件,它在包装中注明它正在添加我的特定Vagrantfile,然后我运行:

vagrant box add boxname test.box

它出现在vagrant box list就好了,现在当我创建一些测试目录时,vagrant init boxname后跟vagrant up 然后它提供了包含结帐文件和所有内容的框,但是设置正确的端口转发, 实际上并没有使用我的Vagrantfile,我根本打包了它,但在该目录中生成了一个新的默认文件。

我在〜/ .vagrant.d / boxes / boxname中注意到它有默认的Vagrantfile,以及我打包的那个包含/ _Vagrantfile

有什么方法可以让我在vagrant init boxname时生成特定的Vagrant文​​件?

2 个答案:

答案 0 :(得分:23)

这实际上都是按预期工作的。 Vagrant在加载时会加载多个Vagrantfiles(而不仅仅是vagrant init中的一个),并且随盒子打包的Vagrantfile就是其中之一。有关更多信息,请在此处阅读“Vagrantfile加载顺序”:https://www.vagrantup.com/docs/vagrantfile/#load-order-and-merging

简而言之:Vagrant按特定顺序加载多个Vagrantfiles,并合并其配置。 Vagrantfile框作为此过程的一部分加载到根Vagrantfile(来自vagrant init)之前。

目前无法制作使用vagrant init生成的骨架Vagrantfile。

您在打包的Vagrantfile中放置的配置(例如端口转发)应该正确加载,因为在合并配置时,它应该只是附加所有端口转发。

如果没有发生这种情况,您应该报告错误!但是为了得到答案,这就是事情的表现方式。

答案 1 :(得分:0)

这段代码对我有用

vagrant package --output vagrant_example.box