vagrant
Vagrantfile

Vagrantのconfig.vm.synced_folderのパスの設定、絶対パスか相対パスか

More than 1 year has passed since last update.

VagrantfileでホストOSとゲストOSのフォルダを同期したい時にconfig.vm.synced_folderで設定しますが、ホストOS側、ゲストOS側それぞれパスの設定の仕方を華麗にミスったせいでよく分からんフォルダ同士が謎に同期されるという事象が起きたので、2度とこのようなことが起こらぬようここに記しておきます。

※追記

コメントでご指摘がありましたが、
ホスト側のパスはVagrantfileからの相対パスだそうなので修正しました。

■結論

以下のように、ホストOS、ゲストOS共に最上位のフォルダからのパスをきちんと書いて、かつホストOS側のフォルダが存在しない場合は自動生成するcreate:"true"というオプションをつけることでうまくいきました。

config.vm.synced_folder "/docker", "/home/ubuntu/vagrant",create:"true"

■フォルダ構成

ホストOS
VagrantのゲストOSにUbuntuを導入して、そこにdockerを試しに入れてみようと思っていたので、Developフォルダの中にVagrantfileを設置し、同じくDevelopフォルダの中にdockerというフォルダを作成しました。

/Users/katsuki_y/Develop/docker

ゲストOS

/home/ubuntu

■もともとどんな設定をしたか

1.最初の設定

Vagrant.configure("2") do |config|
   config.vm.box = "ubuntu/xenial64"
   config.vm.synced_folder "/docker","/vagrant"
end

dockerフォルダ内にVagrantfileが存在したので、ホストOS側のdockerフォルダを同期しようと思いました。
また、ゲストOS側は/home/ubuntuの下に/vagrantフォルダを自動作成してdockerフォルダと同期しようとしました。

結果、ホストOS側の/dockerフォルダがありません!と怒られました。

1.次の設定

そうか、ホストOS側はdockerフォルダからの相対パスだから、/dockerじゃ無くて、/にすればいいのか!
と思って以下のように設定しました。

Vagrant.configure("2") do |config|
   config.vm.box = "ubuntu/xenial64"
   config.vm.synced_folder "/","/vagrant"
end

結果、ホストOS側の'/'以降の全てのフォルダ(UsersとかDesktopとか全部)が同期されて訳わからんくなってましたw

そうか、絶対パスなんだ!
と、ここでようやく気づき、少し調べてcreate:"true"が必要ということがわかり、上部の結論に書いた設定に至りました。

■もう一度結論

config.vm.synced_folder "/Users/katsuki_y/Develop/docker", "/home/ubuntu/vagrant",create:"true"

パスって難しいですね><

以上。