我在两台机器(家庭和办公室)上使用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 vs 501)rm -rf .vagrant
并再次成功地做vagrant up
。在原始问题上
我收到关于流浪者的消息,说id值与我创建的时间不一样。 (总共503 vs 501)
您可以通过编辑以下文件.vagrant\machines\default\virtualbox\creator_uid
中的UID并将501/503更改为0来修复它。(0表示您以sudo身份运行)
但我认为另一个问题是,你的每台机器都在创建自己的虚拟机并将其存储在你的/Users/user/Documents/Virtual Machines
下,而你却没有共享这些文件。
当您使用VirtualBox创建VM时,vb将分配VM和id - 此id是密钥,将在vagrant和vb之间建立链接。当您创建2个不同的VM时,VM具有不同的Id,并且vagrant无法在2之间切换。
希望到目前为止这是明确的,但如何从那里开始 - 你会有几个选择:
rm -rf
所以你每次切换计算机时重新创建VM)所以你可以创建一个.vagrant.home
和.vagrant.office
并切换.vagrant
指向相应的文件夹当你改变因此至少您不需要重新创建VM,您只需从相应的计算机启动VM即可。这不是理想的,但会起作用。.vagrant
目录,这样您就不会将.vagrant
目录存储在您的保管箱帐户下,但是您可以使用一个脚本导出该变量并将.vagrant目录分别存储在您的每台机器上(一个未共享的文件夹),因此每台计算机都将创建自己的VM。如果你计划拥有不同的位置,你可以在你的bash配置文件中为每台计算机设置VAGRANT_CWD
,但你也可以使用workhere.sh
脚本,如果你在两台计算机上都有相同的设置就可以执行export VAGRANT_CWD=/folder...
,只需要做source workhere
在你做vagrant up
之前/Users/<user>/Library/VirtualBox/VirtualBox.xml
下检查文件并查看<MachineRegistry>
下的条目,您将获得机器条目的uuid,确保在导出/导入后您的两台计算机之间匹配
对于vagrant,你需要在你的2台计算机/Users/<user>/.vagrant.d/data/machine-index/index
之间同步另一个文件,计算机上的可用VM列表。如果在另一台计算机上没有其他VM,则可以同步,但最好只复制要同步的VM的必要条目。完成此操作并同步.vagrant
文件夹后,您应该可以从一台计算机或另一台计算机上使用vagrant up
。
同样,我没有测试所有步骤,但我认为这会起作用。
几点说明:
Vagrant为这个用例提供了一个环境变量:VAGRANT_DOTFILE_PATH
请参阅此处的文档:
https://www.vagrantup.com/docs/other/environmental-variables.html#vagrant_dotfile_path
VAGRANT_DOTFILE_PATH
可以设置
VAGRANT_DOTFILE_PATH
来更改Vagrant存储VM特定状态的目录,例如VirtualBox VM UUID。默认情况下,它设置为.vagrant
。如果将Vagrant文件保存在Dropbox文件夹中以便共享桌面和笔记本电脑之间的文件夹(例如),Vagrant将使用最近使用的主机上的VM详细信息覆盖此目录中的文件。为避免这种情况,您可以在各自的机器上将VAGRANT_DOTFILE_PATH
设置为.vagrant-laptop
和.vagrant-desktop
。 (记得要更新你的.gitignore
!)