記事の概要
Vagrantで立ち上げたゲストマシンをreboot
あるいはshutdown -r now
で再起動すると、ホストマシンとゲストマシンの共有フォルダが同期されません。
vagrant reload
を使って再起動すると、同期されます。
Vagrantで立ち上げたゲストマシンを再起動する時は、vagrant reload
を用いましょう。ゲストマシンにゲストマシンの再起動をさせてはいけません。ホストマシンにゲストマシンを再起動させる必要があるのです。
再起動までのプロセスを自動化する方法については、『Vagrantのゲストマシンを自動で再起動する』をご覧下さい。
記事の詳細
実行環境
Windows 10 Home
Vagrant 2.2.4
ubuntu/bionic64 Official Ubuntu 18.04 LTS(Bionic Beaver)Daily Build
使用したVagrantfile
Vagrant.configure("2") do |config|
# 利用するVagrantBox
config.vm.box = "ubuntu/bionic64"
end
ゲストマシンを再起動する前の共有フォルダ
vagrant up
でゲストマシンを起動します。
下記コマンドで、ゲストマシンの共有フォルダ/vagrant
を確認します。
ホストマシンと同じファイルが存在するのが確認できます。
すなわち、共有フォルダが正しく同期されていることを示しています。
vagrant ssh
cd /vagrant
ls -a
rebootやshutdown -r nowで再起動した後の共有フォルダ
下記コマンドでゲストマシンを再起動します。
sudo reboot
先程と同じコマンドで、ゲストマシンの共有フォルダ/vagrant
を確認します。
ゲストマシンの共有フォルダが空のフォルダになっています。
一方、ホストマシンの共有フォルダには再起動前と同じファイルが存在します。
すなわち、共有フォルダが同期されていないことを示しています。
下記のコマンドshutdown -r now
で再起動しても、reboot
と同様の結果です。
すなわち、共有フォルダは同期されません。
sudo shutdown -r now
vagrant reloadで再起動した後の共有フォルダ
下記コマンドでゲストマシンを再起動します。
vagrant reload
同様に共有フォルダを確認します。
ゲストマシンの共有フォルダには、ホストマシンと同一のファイルが存在します。
すなわち、共有フォルダが正常に同期されていることを示しています。
したがって、Vagrantのゲストマシンを再起動する時はvagrant reload
を使用しましょう。
補足事項
Vagrantfileで共有フォルダを明示する場合
下記Vagrantfileのように、共有フォルダを明示的に定義しても、結果は変わりません。
Vagrant.configure("2") do |config|
# 利用するVagrantBox
config.vm.box = "ubuntu/bionic64"
# 共有フォルダ
config.vm.synced_folder "", "/vagrant_data"
end
reboot
あるいはshutdown -r now
で再起動すれば同期されません。
vagrant reload
で再起動すれば同期されます。
ポートフォワード
下記Vagrantfileのように、ポートフォワードされたゲストマシンについて。
Vagrant.configure("2") do |config|
# 利用するVagrantBox
config.vm.box = "ubuntu/bionic64"
# ポートフォワード
config.vm.network "forwarded_port", guest: 80, host: 8080
# プロビジョニング
config.vm.provision "shell", inline: <<-SHELL
apt update
apt upgrade -y
apt install -y apache2
SHELL
end
reboot
、shutdown -r now
、vagrant reload
のどのコマンドで再起動しても、http://127.0.0.1:8080/でapacheのデフォルトページを見ることが出来ます。
すなわち、ポートフォワードは再起動の方法の影響を受けなさそうです。
参考にした記事