同步目录 Synced folder 支持在宿主机和客户机之间共享目录,从而允许你在宿主机的项目文件上工作,但是可以在客户机上编译并运行。
默认情况下,Vagrant 会共享项目目录(包含 Vagrantfile 的目录)到 /vagrant
。
1. 配置
通过 Vagrantfile 中的 config.vm.synced_folder
方法配置同步目录。配置指令的用法非常简单:
Vagrant.configure("2") do |config|
# other config here
config.vm.synced_folder "src/", "/srv/website"
end
第一个参数是宿主机的目录路径。如果是相对路径,则相对于项目的根目录。第二个参数必须是宿主机中的绝对路径,这个目录会共享宿主机的那个目录。如果第二个参数的目录不存在(支持递归创建),则会自动创建。
2. 选项
配置同步目录时必须指定额外的选项参数。这些参数在下面列出,用法也在下面演示了,其中的 owner/group 示例提供了两个额外选项,用都会分隔。
除了这些选项之外,特定的同步目录类型可能允许更多选项。详细信息,请参阅特定同步目录类型的文档。内置的已同步目录类型有 NFS、SMB、VirtualBox、RSync。
- create (boolean):默认是 false。如果为 true,如果 host 路径不存在时会自动创建。
- disabled (boolean):如果为 true,这个同步目录会被禁止且不会被设置。可以用来禁止之前定义的同步目录或基于某些外部因素有条件地禁用定义。
- group (string):将会拥有同步目录的组。默认情况下,这会是 SSH 用户。某些同步目录类型不支持修改组。
- mount_options(array):传递给 mount 命令的附加 mount 选项的列表。
- owner (string):此同步目录所有者对应的用户。默认情况下是 SSH 用户。某些同步目录类型不支持修改所有者。
- type (string):同步目录的类型。如果未指定,Vagrant 将自动选择最佳的同步目录类型选项。否则,你可以指定特定的类型,如“nfs”。
- id(string):客户机中此已同步目录的挂载点的名称。在客户机上运行 mount 时会出现这种情况。
3. 开启
同步目录在执行 vagrant up
或 vagrant reload
时自动设置。
4. 关闭
在定义文件中使用 disabled
选项可以关闭同步目录:
Vagrant.configure("2") do |config|
config.vm.synced_folder "src/", "/srv/website", disabled: true
end
下面示例可以关闭默认的 /vagrant
共享:
config.vm.synced_folder ".", "/vagrant", disabled: true
5. 修改 Owner/Group
默认情况下,Vagrant 使用 owner/group 集合挂载同步目录到 SSH 用户(mounts the synced folders with the owner/group set to the SSH user)。有时最好将目录挂载到不同的用户和组。选项可以这样设置:
config.vm.synced_folder "src/", "/srv/website",
owner: "root", group: "root"
注意:mount_options 中定义的所有者和组 ID 将优先于其他所有者和组选项。
例如,给出以下配置:
config.vm.synced_folder ".", "/vagrant", owner: "vagrant",
group: "vagrant", mount_options: ["uid=1234", "gid=1234"]
挂载的同步目录将由 ID 为 1234 的用户和 ID 为 1234 的组拥有。owner 和 group 选项将被忽略。
6. 符号链接
Vagrant 通过配置各种虚拟机管理程序(如 VirtualBox)来确保符号链接的正常工作,但某些宿主机/客户机组合仍然无法正常工作。这可能会影响一些依赖于符号链接的开发环境。
如果需要使用符号链接,建议先测试。