我有一个用于 lucid32 盒子的特定 Vagrantfile,它安装了一些非常标准的包(PHP/MySQL/Apache),进行一些特定的端口转发等等,我设置它,从 git checkout 一个项目并更改一些服务器配置,我想要把这个盒子打包给团队中的其他开发者使用,所以我使用了命令:
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 中的那个
有什么方法可以让我在执行
vagrant init boxname
时生成特定的 Vagrantfile ?
最佳答案
这实际上都是按预期工作的。 Vagrant 在加载时会加载多个 Vagrantfile(不仅仅是 vagrant init
中的那个),而与盒子一起打包的 Vagrantfile 就是其中之一。有关更多信息,请在此处阅读“Vagrantfile 加载顺序”:https://www.vagrantup.com/docs/vagrantfile/#load-order-and-merging
简而言之:Vagrant 按特定顺序加载多个 Vagrantfile,并合并它们的配置。在根 Vagrantfile (来自 vagrant init
的那个)之前,Vagrantfile 框作为此过程的一部分被加载。
目前无法制作由 vagrant init
生成的骨架 Vagrantfile。 .
您放入打包的 Vagrantfile 中的配置,例如端口转发,应该正确加载,因为在合并配置时,它应该只是附加所有端口转发。
如果这没有发生,你应该报告一个错误!但是为了一个如此的答案,这就是事情应该如何表现。
关于virtualbox - 使用自定义 Vagrantfile 打包一个基本盒子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14861604/