🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余10个优惠名额) →

路径(八):用 Vagrantfile 配置虚拟机 — 共享目录

用 vagrant init 命令初始化项目以后,会在你的项目的目录下面创建一个叫 Vagrantfile 的文件。虚拟机在启动的时候,会检查这个文件上的内容,你可以在这个文件里面修改跟虚拟机相关的配置,比如虚拟机的用户名,网络的配置,使用的内存大小,共享的目录等等。用你喜欢的编辑器打开项目的目录,然后再打开 Vagrantfile 这个文件。

这个文件里的内容的语法是 Ruby 语言,你不用懂 Ruby 语言,只需要简单的修改就能通过这个文件去配置虚拟机。在这个文件里,所有最前面用 # 开头的,都是被注释掉的内容,有些说明了相关的配置的使用方法,有些是配置语法本身。还有几行代码前面不带 # 号。

config.vm.box = "chef/centos-6.5"

上面的的配置说明了这个项目用的虚拟机的 Box 叫什么,我这里是 chef/centos-6.5 ,你看到的可能跟这个不太一样。

共享目录

同步目录,或者共享目录,就是你的电脑(Host)跟虚拟机之间共享的一个目录。在你电脑上,你把文件放到这个目录里面,ssh 到虚拟机以后,你也可以在某个目录下面找到这些文件。默认情况下,这个同步的目录在你电脑上就是项目所在的目录,也就是Vagrantfile 这个文件所在的目录。在虚拟机上,这个目录的位置是 /vagrant,也就是你把要共享的文件放到项目的目录里面,在虚拟机上的 /vagrant 这里可以看到,你可以直接在虚拟机上修改在这个目录下面的文件,这样在你电脑上,也可以看到修改以后的结果,反过来也是一样的。

在用 vagrant up 启动虚拟机的时候,显示的提示信息里,可以找到电脑与虚拟机对应的同步目录。

==> default: Mounting shared folders...
    default: /vagrant => /Users/xiaoxue/Desktop/ninghao-project

上面显示,/vagrant 是虚拟机上的目录,对应的同步目录是我电脑上的 /Users/xiaoxue/Desktop/ninghao-project 这个目录。

配置共享目录

下面去手工配置一下共享的目录,先在项目的根目录下面新建一个目录叫 app ,在这个目录下面新建一个文件叫 README.md,打开这个文件,输入点东西:#Hello World 。然后打开 Vagrantfile ,搜索一下共享目录的配置:

# config.vm.synced_folder

去掉这行代码前面的 # 符号 。这个配置后面有两个参数,第一个参数是主机上的目录,可以使用绝对的位置,也可以使用相对的位置,如果是相对位置,是相对于项目根目录的位置,也就是相对于 Vagrantfile 这个文件所在的目录的位置。两个参数之间是一个逗号,第二个参数是在虚拟机上的目录,如果你设置的目录在虚拟机上不存在,Vagrant 在启动虚拟机的时候,会自动去创建这个目录。

这里我们修改成:

config.vm.synced_folder "app", "/vagrant"

修改后,保存文件。这样在启动虚拟机的时候,会使用这个配置。如果虚拟机正在运行,可以用 vagrant reload 命令重启一下,在启动的时候你会看到:

==> default: Mounting shared folders...
    default: /vagrant => /Users/xiaoxue/Desktop/ninghao-project/app

现在,共享目录就变成了,在虚拟机上仍然是 /vagrant,不过在我的电脑上是 /Users/xiaoxue/Desktop/ninghao-project/app ,app 这个目录是在项目的根目录下面,这个目录的下面有一个文件叫 README.md 。用 SSH 登录到虚拟机,Windows 用户可以使用 Putty 登录。然后:

cd /vagrant
ls -la

进入到虚拟机的 /vagrant 目录 ,再用 ls 命令列出目录下面的文件,这里用了两个参数 -la,它们可以更详细的显示目录与文件的相关信息。你会看到 README.md 这个文件。留意一下这个文件的拥有者还有用户组,默认都是 vagrant ,你不能在虚拟机上用命令修改这个目录的所有权。不过可以通过 Vagrantfile 去配置这个共享目录的所有权。

在虚拟机上修改一下 README.md 文件(可以用 vim 编辑器),保存以后,再到你的电脑上直接用编辑器打开它看一下,然后在编辑器上修改一下,再去虚拟机上看看这个文件的变化。

  配置主机与虚拟机的共享目录

路径 Vagrant

评论

无论修改任何一边的,文件都会改变,因为他们是共享的。只要在虚拟机上面安装好 LAMP ,然后直接在D盘下面创建一个www目录直接共享到Apache2的www目录,就可以了正常使用vagrant本地开发了。

怎么在chocolatey下配置lamp,谢谢

理解错了,Chocolatey 是用来安装与管理软件用的一个工具,配置 LAMP ,你可以先安装一下 vagrant 与虚拟机,然后用 vagrant 去管理虚拟机,然后在虚拟机上去配置 LAMP ,Linux,Apache,MySQL,PHP。我建议,可以选择 nginx 替代 Apache 。还没有写到这里,继续关注 :)

皓哥 共享文件夹 已经修改了 也重启了 就是不同步 如何解决
default: Machine booted and ready!
default: Checking for guest additions in VM...
default: Mounting shared folders...
default: /vagrant => C:/Users/Administrator/Desktop/project/app

你把文件放到桌面上的 project/app 这个目录的下面,在虚拟机上找不到吗?

虚拟机 中就没有app这个文件夹

你看:default: /vagrant => C:/Users/Administrator/Desktop/project/app ,意思是在虚拟机上同步的目录是在 /vagrant 这里。在你的电脑上是 C:/Users/Administrator/Desktop/project/app 。

也就是,你的 app 目录里的东西,可以在虚拟机上的 /vagrant 这里找到。

我也遇到了同样的问题,虚拟机中找不到任何文件,在虚拟机创建的文件在主机上也找不到。 只开了一个虚拟机。

可以了 我两个虚拟主机同时开启了 不好意思麻烦你了

但是我做了 两个 项目是 project 还有个是 dyjx 但是 有一个是同步的 登陆的ip 127.0.0.1 都是这个ip 那个centos 7.0 的无法同步

如果你想为一个项目定义多台虚拟机,你需要把它们入到一个 Vagrantfile 里。参考视频:http://ninghao.net/video/1773 ,从这个视频开始往后看。

works!

通过web访问这个windows共享目录里的网页,速度奇慢无比,请问有办法解决吗?

嗯,是个问题。我在 Mac 上也遇到了同样的问题,运行的应用文件特别多的时候,就会很慢,比如 Drupal 。我用了一个 vagrant-bindfs 插件,解决了这个慢的问题。不过在 Windows 上我还没有测试过这个插件。

centos 升级内核的时候造成共享目录报错
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

博主,请教一个问题。我配置好web目录后,无法共享。
我希望在windows下开发,然后通过共享目录同步到虚拟机配置的web目录里面。请问如何才能做到?

其实共享目录不用额外配置,启动以后您项目目录跟虚拟机上的/vagrant目录就是同步的了。

皓哥帮忙看一眼,我不能共享目录。我本机是Elementary OS(一个Ubuntu的衍生版本):
1. 执行vagrant命令的时候总是需要sudo权限
2. 另外, 我reload的时候的信息在 下面,并且没有挂载共享目录的那种提示,并且最下面还给了错误。
==> default: Attempting graceful shutdown of VM...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Available bridged network interfaces:
1) enp3s0
2) wlx14cf92fb8773
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.

已解决,重新安装了。

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点