質問: こんにちは。MacOSXからVirtualbox(5.0.6)とVagrant(1.8.1)を使って、Ubuntu14.04のboxを立ち上げ、その環境下でDocker(1.10.1)の使い方を勉強しています。その途中で、新たなshared folderを作っても、うまく機能しないという問題が起きました。 Quickstart: Compose and Djangoを参考に、Djangoのimageを作ったのですが、そのあと、Ubuntu(guest)とOSX(host)の間で新たにshared folderを作ろうとしたところ、共有できなくなっていることに気がつきました。Docker Composeのチュートリアル中にしたことが原因なのか、あるいはその前からできなくなっていたのかわからないのですが、状況として、 * vagrant reloadしてもエラーは出ず、 > > default: Mounting shared folders... > > ... > > default: /folder/path/on/guest => /folder/path/on/host > > > というメッセージが確認できているので、Vagrantfileの設定は正しく認識されていると思われる(Virtualboxのshared foldersにも新たなshared folderがリストされている)。 * vagrant sshでユーザーvagrantとしてUbuntuを操作できる。 * Ubuntu側で sudo /usr/sbin/VBoxService --version を実行すると5.0.6...と返ってくるので、 VBoxServiceはインストールされていると思われる。 * 以前にいくつか作成したshared folders中では、ファイルの共有は引き続きできている。 * 新たに作成した(はずの)共有フォルダ中では、Dockerで作成したファイルだけでなく、全てのファイルが 共有されていない。 * 権限の問題かと思ったが、Docker ComposeのチュートリアルでDjangoのimageを作った際に chown - R $USER:$USER . (これを実行したのは~/docker/django_testimageというディレクトリでし た)を行っただけで、他はいじっていないはず。 * Vagrantfileの当該のconfig.vm.synced_folderのところでmount_options: ["dmode=777", "fmode=777"]を加えてreload, sshしてみたが、やはり共有されていない。 という感じです。なにぶん、簡単なブログを作成したことがある程度のプログラミング初心者なので、他にどのような原因が考えられるのかわかりません。どのようなことが考えられるでしょうか? VirtualboxとVagrantを再インストールしてみましたが状況は変わらず、ゲスト側で sudo /etc/init.d/vboxadd status を実行してみても The VirtualBox Additions are currently running. と返ってくるので、VirtualBox Additions はやはり正常に動いているようです。 Mac側の設定が原因でしょうか?
回答: ゲスト側で sudo find / -name "path/to/shared_folder" を実行したところ、 /home/path/to/shared_folder と /home/vagrant/path/to/shared_folder の2つが見つかりました。おかしいなと思い、 cd /home/vagrant/path/to/shared_folder でそこに入ってみると、ホスト側としっかり同期できているフォルダが見つかりました。 原因は、Vagrantfileで/home/配下のパスを共有フォルダとして指定したことのようです。推測ですが、vagrantで共有フォルダを設定するには、ゲスト側の共有フォルダはvagrantという名前のつくフォルダの配下にある必要があり、共有フォルダの指定パスが/vagrant/配下ではない場合(例えば/home/とか)、vagrantが自動的に、その直下にvagrantフォルダを作成(/home/vagrant/)し、さらにその下に指定されたパスの構成でフォルダを作成していく(/home/vagrant/path/to/shared_folder)ようです。(ドキュメントに書いてあるのかもしれませんが、見逃してしまったようです。)。加えて、homeでlsやlaを実行しても、そのvagrantフォルダは表示されなかったため、findするまで存在に気づきませんでした。とても基本的なことでした。お騒がせしました。