主机系统:Ubuntu Linux,客户系统:Windows(任意版本)。
我想在 Windows 系统上共享一个 Linux 文件夹。
当我使用 VirtualBox 时,我通过 GUI 配置所有设置。共享文件夹设置如下:
Name: downloads
Path: /home/user/downloads
Access: Full
Auto Mount: Yes
At: Z:
启动虚拟机后,共享文件夹似乎已挂载到磁盘Z
,一切正常。
问题:我如何使用 Vagrant 做同样的事情?
我在文件中创建了虚拟机的映像package.box
。然后我配置了 Vagrant ( config.vm.box = "./package.box"
),并启动了机器。一切都很好,但是我如何配置共享文件夹以自动挂载?
我尝试了不同的选择,我的最后一个选择是:
config.vm.synced_folder "../shared-data", "X:\\", create: true, id: "X"
共享文件夹设置如下:
Name: X
Path: /home/user/downloads
Access: Full
Auto Mount: (empty)
At: (empty)
如何让 Vagrant 自动挂载共享文件夹(Auto Mount
,At
)?
以防万一:客户系统没有配置 SSH,因此 Vagrant 会挂起“正在等待机器启动。这可能需要几分钟”的消息。我稍后会修复它,VM 会启动并正常工作。
附言:Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "./package.box"
config.vm.synced_folder "../shared-data", "X:\\", create: true, id: "X"
config.vm.provider "virtualbox" do |vb|
vb.name = "Win Vagrant test"
vb.gui = true
vb.memory = "2048"
vb.cpus = 2
end
end
答案1
取决于提供商。使用 virtualbox;像为 linux 客户机定义共享一样定义共享。virtualbox
config.vm.synced_folder ".", "/vagrant", disabled: false
会将其挂载在 下,C:\vagrant
这似乎是一个链接,\\vboxsvr\vagrant\
但该符号在 vagrant 配置中不起作用。
其他文件夹将以相同方式显示。不确定如果文件夹名称受保护、长度超过 8 个字符或使用 Windows 上禁用的字符会发生什么。这些都是需要牢记的限制。
答案2
我的问题是 Vagrant 挂载了共享目录后虚拟机启动。但在我的例子中,Vagrant 等待虚拟机启动几分钟,但未检测到它已启动,然后显示错误。Vagrant 通过 SSH 或 WinRM 检查虚拟机的可用性。
这是我所做的:
- 启动并配置 WinRM:
winrm quickconfig
- 将 WinRM 服务配置为自动启动(延迟启动)——这可以加快检测速度,但不是必需的
- 创建用户
vagrant
并将其包含在管理员组中以便能够使用 WinRM。 - 修复了 Vagrant 配置:
# WinRM
config.vm.communicator = "winrm"
config.winrm.username = "vagrant"
config.winrm.password = "vagrant"
config.winrm.max_tries = 300 # default is 20
config.winrm.retry_delay = 2 #seconds. This is the defaul value and just here for documentation.
# Shared folder
config.vm.synced_folder "../shared-data", "/vagrant"
以下是启动日志的一部分,显示仅在收到 VM 启动事件后才会发生目录挂载。
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 5985 (guest) => 55985 (host) (adapter 1)
default: 5986 (guest) => 55986 (host) (adapter 1)
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: WinRM address: 127.0.0.1:55985
default: WinRM username: vagrant
default: WinRM execution_time_limit: PT2H
default: WinRM transport: negotiate
==> default: Machine booted and ready!
[default] GuestAdditions 6.1.48 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /home/user/tmp/vagrant-test/shared-data
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.