Dropbox 上的 Vagrant .vagrant 文件
Vagrant .vagrant file on Dropbox
我在两台机器(家里和办公室)上使用 Vagrant,我的工作目录存储在 Dropbox 中。我经常运行进入问题:
The VirtualBox VM was created with a user that doesn't match the
current user running Vagrant. VirtualBox requires that the same user
be used to manage the VM that was created. Please re-run Vagrant with
that user. This is not a Vagrant issue.
这很容易通过 rm -rf .vagrant
的蛮力解决,但我想找到一个更优雅的解决方案——比如一种将 .vagrant
文件放在其他地方的轻松自动化的方法。
更新
场景如下:通过 Dropbox 在办公室和家庭计算机之间共享一个工作目录。
- 我
vagrant up
在办公机上,成功。
- 我关掉办公室的机器回家。
- 我在
vagrant up
上收到消息,说 id
值与我创建时的值不同。 (一般情况下 503 对 501)
- 我做了
rm -rf .vagrant
并再次做了 vagrant up
,成功了。
- 当我回到办公室时,同样的问题。
关于原问题
I get the message about on vagrant up, saying the id values aren't the
same as when I created. (503 vs 501 in general)
您可以通过在以下文件 .vagrant\machines\default\virtualbox\creator_uid
中编辑您的 UID 并将 501/503 更改为 0 来修复它。(0 表示您 运行 作为 sudo)
但我认为会出现的另一个问题是您的每台机器都在创建自己的 VM 并将其存储在您的 /Users/user/Documents/Virtual Machines
下,而您没有共享这些文件。
当您使用 VirtualBox 创建 VM 时,vb 将分配 VM 和 id - 这个 id 是关键,并将在 vagrant 和 vb 之间创建 link。当您创建 2 个不同的 VM 时,VM 具有不同的 Id 并且 vagrant 无法在 2.
之间切换
希望到目前为止已经很清楚了,但是如何从那里开始 - 你会有几个选择:
显然您不太在意 VM 的内容(就像您一样 rm -rf
所以每次切换计算机时都会重新创建 VM)因此您可以创建一个 .vagrant.home
和 .vagrant.office
并在换机时将 .vagrant
切换为指向相应的文件夹这样至少你不需要重新创建虚拟机,你可以直接从相应的计算机启动虚拟机.这并不理想,但会奏效。
你可以通过设置环境变量VAGRANT_CWD来避免从上面的点切换.vagrant
目录,这样你就不会存储.vagrant
目录在你的保管箱帐户下,但你可以有一个脚本来导出这个变量并在你的每台机器上单独存储 .vagrant 目录(一个不共享的文件夹)所以每台机器都会创建自己的 VM。
如果您打算使用不同的位置,则可以在每台计算机的 bash 配置文件中设置 VAGRANT_CWD
,但您也可以使用 workhere.sh
脚本来执行 export VAGRANT_CWD=/folder...
如果您在两台计算机上的设置相同,只需在 vagrant up
之前执行 source workhere
另一个选项(我没有测试)将涉及几个步骤:export/import VM 一旦从 VirtualBox 创建到一台计算机到另一台计算机。这里的问题是保留 Id。我不确定,但通常虚拟框应该在您导入另一台计算机时保留 ID。
- 您可以检查
/Users/<user>/Library/VirtualBox/VirtualBox.xml
下的文件并查看<MachineRegistry>
下的条目,您将获得机器条目的uuid,确保它们在您[=75]之后的两台计算机之间匹配=]
- 对于 vagrant,您需要在两台计算机之间同步另一个文件
/Users/<user>/.vagrant.d/data/machine-index/index
计算机上的可用 VM 列表。如果一台计算机上的其他 VM 在另一台计算机上不可用,则可以同步,但最好只复制要同步的 VM 的必要条目。
完成此操作并同步 .vagrant
文件夹后,您应该可以从一台计算机或另一台计算机 vagrant up
。
同样,我没有测试所有步骤,但我认为这会起作用。
几点注意事项:
- 这仅在两台计算机具有相同设置(相同 OS(如果不是版本至少相同的系列)、文件夹结构,因为某些文件涉及完整路径、相同的虚拟盒版本... )
- vagrant box 应该在两台计算机上同步(但我假设是这种情况,因为你可以从同一个 Vagrantfile 中 vagrant up)
- 如果你destroy/create任何一台计算机上的虚拟机,你将需要再次同步ID,因为每次你创建一个新的虚拟机时,虚拟框都会分配一个新的ID
Vagrant 为这个用例提供了一个环境变量:VAGRANT_DOTFILE_PATH
在此处查看文档:
https://www.vagrantup.com/docs/other/environmental-variables.html#vagrant_dotfile_path
VAGRANT_DOTFILE_PATH
VAGRANT_DOTFILE_PATH
can be set to change the directory where Vagrant stores VM-specific state, such as the VirtualBox VM UUID. By default, this is set to .vagrant
. If you keep your Vagrantfile in a Dropbox folder in order to share the folder between your desktop and laptop (for example), Vagrant will overwrite the files in this directory with the details of the VM on the most recently-used host. To avoid this, you could set VAGRANT_DOTFILE_PATH
to .vagrant-laptop
and .vagrant-desktop
on the respective machines. (Remember to update your .gitignore
!)
我在两台机器(家里和办公室)上使用 Vagrant,我的工作目录存储在 Dropbox 中。我经常运行进入问题:
The VirtualBox VM was created with a user that doesn't match the
current user running Vagrant. VirtualBox requires that the same user
be used to manage the VM that was created. Please re-run Vagrant with
that user. This is not a Vagrant issue.
这很容易通过 rm -rf .vagrant
的蛮力解决,但我想找到一个更优雅的解决方案——比如一种将 .vagrant
文件放在其他地方的轻松自动化的方法。
更新
场景如下:通过 Dropbox 在办公室和家庭计算机之间共享一个工作目录。
- 我
vagrant up
在办公机上,成功。 - 我关掉办公室的机器回家。
- 我在
vagrant up
上收到消息,说id
值与我创建时的值不同。 (一般情况下 503 对 501) - 我做了
rm -rf .vagrant
并再次做了vagrant up
,成功了。 - 当我回到办公室时,同样的问题。
关于原问题
I get the message about on vagrant up, saying the id values aren't the same as when I created. (503 vs 501 in general)
您可以通过在以下文件 .vagrant\machines\default\virtualbox\creator_uid
中编辑您的 UID 并将 501/503 更改为 0 来修复它。(0 表示您 运行 作为 sudo)
但我认为会出现的另一个问题是您的每台机器都在创建自己的 VM 并将其存储在您的 /Users/user/Documents/Virtual Machines
下,而您没有共享这些文件。
当您使用 VirtualBox 创建 VM 时,vb 将分配 VM 和 id - 这个 id 是关键,并将在 vagrant 和 vb 之间创建 link。当您创建 2 个不同的 VM 时,VM 具有不同的 Id 并且 vagrant 无法在 2.
之间切换希望到目前为止已经很清楚了,但是如何从那里开始 - 你会有几个选择:
显然您不太在意 VM 的内容(就像您一样
rm -rf
所以每次切换计算机时都会重新创建 VM)因此您可以创建一个.vagrant.home
和.vagrant.office
并在换机时将.vagrant
切换为指向相应的文件夹这样至少你不需要重新创建虚拟机,你可以直接从相应的计算机启动虚拟机.这并不理想,但会奏效。你可以通过设置环境变量VAGRANT_CWD来避免从上面的点切换
.vagrant
目录,这样你就不会存储.vagrant
目录在你的保管箱帐户下,但你可以有一个脚本来导出这个变量并在你的每台机器上单独存储 .vagrant 目录(一个不共享的文件夹)所以每台机器都会创建自己的 VM。 如果您打算使用不同的位置,则可以在每台计算机的 bash 配置文件中设置VAGRANT_CWD
,但您也可以使用workhere.sh
脚本来执行export VAGRANT_CWD=/folder...
如果您在两台计算机上的设置相同,只需在vagrant up
之前执行 另一个选项(我没有测试)将涉及几个步骤:export/import VM 一旦从 VirtualBox 创建到一台计算机到另一台计算机。这里的问题是保留 Id。我不确定,但通常虚拟框应该在您导入另一台计算机时保留 ID。
- 您可以检查
/Users/<user>/Library/VirtualBox/VirtualBox.xml
下的文件并查看<MachineRegistry>
下的条目,您将获得机器条目的uuid,确保它们在您[=75]之后的两台计算机之间匹配=] - 对于 vagrant,您需要在两台计算机之间同步另一个文件
/Users/<user>/.vagrant.d/data/machine-index/index
计算机上的可用 VM 列表。如果一台计算机上的其他 VM 在另一台计算机上不可用,则可以同步,但最好只复制要同步的 VM 的必要条目。
- 您可以检查
source workhere
完成此操作并同步 .vagrant
文件夹后,您应该可以从一台计算机或另一台计算机 vagrant up
。
同样,我没有测试所有步骤,但我认为这会起作用。
几点注意事项:
- 这仅在两台计算机具有相同设置(相同 OS(如果不是版本至少相同的系列)、文件夹结构,因为某些文件涉及完整路径、相同的虚拟盒版本... )
- vagrant box 应该在两台计算机上同步(但我假设是这种情况,因为你可以从同一个 Vagrantfile 中 vagrant up)
- 如果你destroy/create任何一台计算机上的虚拟机,你将需要再次同步ID,因为每次你创建一个新的虚拟机时,虚拟框都会分配一个新的ID
Vagrant 为这个用例提供了一个环境变量:VAGRANT_DOTFILE_PATH
在此处查看文档:
https://www.vagrantup.com/docs/other/environmental-variables.html#vagrant_dotfile_path
VAGRANT_DOTFILE_PATH
VAGRANT_DOTFILE_PATH
can be set to change the directory where Vagrant stores VM-specific state, such as the VirtualBox VM UUID. By default, this is set to.vagrant
. If you keep your Vagrantfile in a Dropbox folder in order to share the folder between your desktop and laptop (for example), Vagrant will overwrite the files in this directory with the details of the VM on the most recently-used host. To avoid this, you could setVAGRANT_DOTFILE_PATH
to.vagrant-laptop
and.vagrant-desktop
on the respective machines. (Remember to update your.gitignore
!)