将VirtualBox中的Windows虚拟机转换为Vagrant基础镜像。

12

我在VirtualBox中创建了一个Windows 8虚拟机,并进行了自定义设置和安装软件。

现在,我想将其转换为Vagrant基础镜像,以便与团队分享并基于我的自定义Windows生成许多其他虚拟机。

这是可行的,我在vagrantcloud上看到了Windows基础盒子。只是没有关于如何打包现有的Windows VirtualBox VM的文档。

请给我提供说明或链接,以从我的现有Windows VM创建Vagrant基础盒子。由于创建基础盒子文档适用于Linux,所以对我没有帮助。

非常感谢SO社区提前的支持!

1个回答

15
您可以使用--base参数来执行vagrant package命令以完成操作。
首先,在VirtualBox的GUI中找到虚拟机的名称。假设它叫“Windows”,您可以输入以下命令: vagrant package --base Windows --output /path/to/windows.box 那个.box文件将是您的基础包。您可以通过使用以下命令在本地安装它: vagrant box install /path/to/windows.box 或者,您可以将其放在服务器上并将其URL放置在您的Vagrantfile文件中的config.box_url参数上,使其可供其他人使用。

这是用vagrant打包创建的虚拟机。我手头有一个不是由vagrant创建的虚拟机,是我手动使用VirtualBox创建的。因此,“vagrant package”会报错,说现在没有运行的虚拟机。 - Zasz
你试过我的建议了吗?对我来说它完全有效,我不明白为什么你的 Vagrant 会有任何不同。 - cassianoleal
如果使用vagrant up创建了虚拟机,则您的打包命令可以打包它,因为vagrant知道该虚拟机。在我的情况下,vagrant不知道我使用VirtualBox创建的虚拟机。因此,当我运行您的命令时,会出现以下错误::/System/Vagrant/embedded/gems/gems/vagrant-1.6.3/lib/vagrant/machine.rb:306:in 'id=': undefined method 'children' for nil:NilClass (NoMethodError) - Zasz
很奇怪,这对我来说完全正常。我一开始就理解了你的问题:VM未知于Vagrant,将其打包到基础框中。你是在Windows上运行吗?我认为这是Vagrant本身的问题,可能值得提交错误报告和/或在freenode上提出问题。 我已经在VB中创建了一个VM(没有使用Vagrant),并将其名称给了--base,然后Vagrant成功地创建了我的基础框。 另一件要检查的事情是您是否正在运行最新版本的Vagrant和VB。 - cassianoleal
5
你说得对,我必须从不包含Vagrantfile的文件夹外部运行此命令。我是从另一个git存储库内部运行它的,该存储库中有一个Vagrant文件。 - Zasz
不错!我可能仍然会向Vagrant提交错误报告,因为这似乎是不一致的行为。 :) - cassianoleal

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