【问题标题】:Vagrant synced folders writes over hosts files when vagrant up当 vagrant up 时,Vagrant 同步文件夹会覆盖主机文件
【发布时间】:2016-04-22 09:46:38
【问题描述】:

我正在使用 Vagrant 在 Virtualbox 上设置一个 ubuntu 盒子。 在 vagrant 文件中,我指定了同步文件夹以将我的代码与来宾同步:

config.vm.synced_folder "/host/target/webapp", "/guest/webapp"

我的问题只有在我机器被销毁然后用 vagrant up 重建时才会出现。在这种情况下,Vagrant 会将访客上的文件夹同步到主机上的文件夹,而不是主机到访客。

"/guest/webapp" ---> "/host/target/webapp"

我根本不喜欢这种行为,如果我没有将主机上的代码签入到我的版本控制中,我将失去我的代码。

同步应该是双向的吗?有没有办法将其配置为仅同步一种首选主机到访客的方式。在vagrant basic sync 中找不到任何相关信息

在下面的 cmets 中,建议在哪里我的配置(Chef-Solo)哪里是问题的原因。 为了排除配置阶段,我做了以下操作:

Vagrant up --no-provision

与访客同步的主机内容。

rm -r /guest/webapp/ 在来宾上

导致主机内容也被删除。

mkdir /guest/webapp/test 在客户机上

创建的文件夹 test 也在主机上创建。

我认为这证明了同步是双向的。

【问题讨论】:

  • 这真的很奇怪,因为我只看到过主机 --> 来宾,所以即使您在来宾上同步现有文件夹,它也会被主机上的文件夹内容替换。我也有一些疑问,如果主机文件夹被来宾的内容替换,那么您当前的文件夹将是空的,因为 vagrant 将默认文件夹同步为/vagrant 与当前文件夹。对于这种情况(/vagrant 文件夹),您确认它工作正常?
  • 我理解你的疑惑。我正在使用 Chef-Solo 进行配置,将标准数据放入“/guest/webapp”,我不知道哪个先发生,文件夹的同步或加载标准数据的配置。只有当它是第一个配置时才会发生这种情况,换句话说,当我运行任何 Vagrant reload/up --Provision 并且该框已经创建时,主机文件夹不会被覆盖。
  • 在配置之前安装共享文件夹。只需第一次运行 vagrant up 而不配置 vagrant up --no-provision,您将看到主机文件夹未更改,它必须来自您的配置
  • 您认为该条款会如何更改/归档主机上的文件夹?这甚至可能吗?我很确定我的厨师食谱不会更改主机上的任何文件或文件夹。据我所知,厨师不会更改“/host/target/webapp”。
  • 我不了解厨师,所以我无法发表评论,但您是否第一次运行vagrant up 没有配置vagrant up --no-provision,您会看到主机文件夹没有更改

标签: vagrant virtualbox


【解决方案1】:

所以 vagrant Synced folders 确实是同步的(可能是为什么它们不只是被称为共享文件夹),所以一旦你同步你的文件夹,你在一侧所做的任何操作都会在另一侧自动同步/复制。 (无论是来自主人还是客人)

如果你真的想要单向分享,可以看看[rsync] (https://www.vagrantup.com/docs/synced-folders/rsync.html)

Vagrant 可以使用 rsync 作为一种将文件夹同步到访客的机制 机器。这种同步的文件夹类型主要在某些情况下很有用 在其他同步文件夹机制不可用的情况下,例如何时 NFS 或 VirtualBox 共享文件夹在来宾中不可用 机器。

rsync 同步文件夹从机器进行一次性单向同步 运行到 Vagrant 正在启动的机器上。

【讨论】:

  • 感谢弗雷德里克的帮助!
猜你喜欢
  • 2015-09-26
  • 2016-01-08
  • 1970-01-01
  • 2016-06-18
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
相关资源
最近更新 更多