如何在Vagrant虚拟机中打包同步文件夹

6

我想要并且已经实现的:

我想要创建一个自定义的vagrant box,包括配置和应用程序,以便在不同的客户端或服务器环境中重复使用。

具体来说,我成功地创建了一个基于Ubuntu(precise/64)的vagrant box,并在我的开发机上安装了node.js,并使用以下命令打包:

vagrant package my-box --output filename.box

我能够将filename.box复制到远程服务器并使用vagrant up启动该box。node.js已像预期的那样安装在vagrant box中。

问题是,我无法将文件打包到同步文件夹vagrant中。在远程服务器上启动box后,同步文件夹为空。

因此,我在本地开发机器上开发的应用程序没有被包含在box中。

我试图找到解决方法或任何关于这种行为的信息,但除了这个未解决的帖子,我在网上找不到任何东西。

我的问题:

  1. 如何保留同步文件夹中的文件并将它们打包到filename.box中以在服务器环境中重复使用。
  2. 这是否可能?我看到的行为是一个bug还是vagrant不打算同时打包文件?
  3. 我还没有对同步文件夹进行任何配置。是否可以从不同的同步文件夹打包文件,而不是常规的/vagrant
  4. 如果根本无法实现这一点,最佳实践是什么,用于部署或重复使用包括应用程序的vagrant环境?
2个回答

3

您不能打包同步文件夹,但您想要的绝对是可能的。

实现这一点最简单的方法是将数据放在盒子中的其他目录中(从而确保它随着盒子一起打包)。并在Vagrant盒子的配置过程中,将数据移动或复制到同步目录中。

一旦盒子启动并运行,同步目录将拥有您想要的文件。


谢谢你的回答。那么当我更改同步文件夹中的文件后,如何确保它们仍留在框内?我需要将文件复制到旧目录并每次创建一个新盒子吗? - Rias
如果文件被复制到同步文件夹中,用户可以自由删除它们。没有办法让它们保留在那里,除非对它们进行一些特殊的权限设置。 - Jake Wilson
我只是想确保在运行“vagrant up”的时候文件都在那里。所以基本上问题是:“如何最好地继续开发我的vagrant box”,有什么好的流程来“升级”并使新文件可用。 - Rias
请注意,用户可能会删除这些文件,然后关闭虚拟机,稍后再次运行 vagrant up 时,这些文件将不再存在。只有在第一次启动虚拟机时才会进行配置,除非您稍后使用 vagrant provision 强制执行。要进行版本控制,请查看 Vagrantfile 中的盒子版本值。 - Jake Wilson

3

1-3) 不可以,也不是设计成按照您期望的方式工作。将VirtualBox的共享文件夹视为远程机器上挂载的卷。它不是您虚拟机文件系统的一部分。实际数据保存在主机上而不是虚拟机上。

4) 如果您想将数据添加到虚拟机中,只需在打包之前将数据复制到虚拟机即可。无需使用共享文件夹。


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