我有一个特定的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文件?
答案 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