1. 程式人生 > >vagrant系列五:Vagrant使用中遇到的坑

vagrant系列五:Vagrant使用中遇到的坑

遇到的問題

之前寫了一系列的vagrant使用教程,當時寫這個教程的時候實在windows的環境下。最近再mac上使用,遇到了一些麻煩。

原文章路徑

今天最想說的一個問題就是許可權的問題。

在windows中由於沒有檔案許可權的概念,所有當我們共享目錄後,共享目錄預設就是777許可權。
但是當我使用mac時,共享後的目錄許可權以及使用者組都不正確了。無法正常使用。這樣導致的一個直接問題就是:

專案a執行在虛擬機器中,需要向runtime目錄寫入日誌或者臨時檔案之類的,總之就是需要讀寫許可權。

解決辦法

當時我直接ssh上vagrang後,給予777許可權,無法寫入,然後又在主機給予777許可權,可以寫入一個檔案,但是下個檔案又拿到許可權寫入。

後來由各種google與百度,看到說使用nfs的方式可以解決這個問題,但是各方給出的解決方案都很成舊,有的方法使用後甚至虛擬機器都無法啟動了。

沒辦法,老老實實上官網看nfs相關的配置吧。老實說官方給的文件真的是有點太簡單抽象了,只能結合之前的一些東西結合起來使用。最終終於找到辦法,這裡將相關的配置貼出來,供大家參考。

  config.vm.define :php7 do |p7|
    p7.vm.provider "virtualbox" do |v|
          v.customize ["modifyvm", :id, "--name", "php6", "--memory"
, "512"] ## 域名解析慢 v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] v.customize ["modifyvm", :id, "--natdnsproxy1", "on"] end p7.vm.box = "CentOs7" p7.vm.hostname = "php7" p7.vm.network :private_network, ip: "192.168.33.10" # ssh 奇怪:第一次啟動虛擬機器無法獲取ip
p7.ssh.username = "root" p7.ssh.password = "vagrant" p7.ssh.host = "192.168.33.11" p7.ssh.port = 22 ## nfs檔案許可權問題 啟動了好幾次才正常,不知道原因 p7.vm.synced_folder "./www", "/data/wwwroot", type: "nfs", :nfs => { :linux_nfs_options => ["not_root_squash"], :map_uid => 0, :map_gid => 0 } end

這個配置是在一個 Vagrantfile 中配置多臺機器的配置文件。其中遇到的一些奇怪問題,註釋中都標明瞭。
* 配置的ip地址,首次使用 vagrant up php7 後,無效,需要重新啟動,虛擬機器才能拿到這個ip。至今不懂為什麼,麻煩知道的告訴我一下啊!
* nfs配置資訊全面解決了許可權問題。你需要給出什麼許可權直接在 vagrang 虛擬機器中進行設定。但是在掛載目錄時,有時候配置的新機器會莫名其妙重新啟動好幾次才可以。我啟動了三次。
* 另一個坑是,新機器安裝後,需要配置dns解析。否則有的資源是無法下載的。

$ vim /etc/resolv.conf

## 增加以下內容
nameserver 8.8.8.8
  • 由於配置了啟動時使用 root 帳號,需要每次在mac上啟動的時候輸入機器密碼,很麻煩,官方指導配置 /etc/sudoers 如下內容
Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports
Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart
Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports
%admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE

該配置僅針對mac

總結

這類問題還是蠻常見,對於使用很久的使用者,輕鬆解決了,但是對於大多數使用vagrant的新手,這個問題很頭痛,可能直接導致放棄使用vagrant吧。為了不讓你放棄,我必須寫出來幫助大家渡過這道坑。