18

我有一个用于 lucid32 盒子的特定 Vagrantfile,它安装了一些非常标准的包(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,以及我打包在 include/_Vagrantfile 中的那个

有什么办法可以让特定的 Vagrantfile 成为我生成的文件vagrant init boxname

4

2 回答 2

23

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

简而言之:Vagrant 按特定顺序加载多个 Vagrantfile,并合并它们的配置。盒子 Vagrantfile 作为这个过程的一部分在根 Vagrantfile(来自 的那个vagrant init)之前被加载。

目前没有办法制作一个由vagrant init.

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

如果这没有发生,您应该报告错误!但是为了一个如此的答案,这就是事情应该如何表现。

于 2013-02-25T22:06:06.683 回答
0

这段代码对我有用

vagrant package --output vagrant_example.box
于 2016-08-24T10:26:14.263 回答