Vagrant+VirtualBox実践メモ|基本コマンドとエラー6つの対処
/ 6 min read
Table of Contents
はじめに
VagrantとVirtualBoxで仮想環境を作るときによく使うコマンドと、実際に踏んだエラーの対処法を1本にまとめました。
エラーの節は独立しているので、詰まっている症状から直接読んでもらって大丈夫です。
基本コマンド
Boxの取得とVagrantfileの生成
# Boxのダウンロード$ vagrant box add Box名
# Vagrantfileの生成$ vagrant init Box名仮想マシンの操作
| 操作 | コマンド |
|---|---|
| 起動 | vagrant up |
| 終了 | vagrant halt |
| サスペンド | vagrant suspend |
| 再起動 | vagrant reload |
| SSH接続 | vagrant ssh |
| 一覧表示 | vagrant global-status |
| 破棄 | vagrant destroy 仮想マシン |
ゲストOSの初期パスワードは vagrant です。
Vagrantfileの設定
割当メモリを変える
config.vm.provider "virtualbox" do |vb| # VirtualBoxのGUIを表示したい場合 # vb.gui = true
# メモリ割当 vb.memory = "4096"endディスク容量を増やす
vagrant-disksize プラグインを入れてから、config.vm.box = "xxxx" の下に設定を追加します。
$ vagrant plugin install vagrant-disksizeconfig.disksize.size = '30GB'Guest Additionsを自動インストールする
$ vagrant plugin install vagrant-vbguestこのプラグインは後述のエラー対処にも出てきます。基本的に入れておくと楽です。
よく出るエラーと対処
1. Guest Additionsのバージョンが合っていない
vagrant up で以下が出るケースです。
Got different reports about installed GuestAdditions version:Virtualbox on your host claims: 5.2.18VBoxService inside the vm claims: 6.1.14ホスト側のVirtualBoxと、ゲスト側のGuest Additionsのバージョンがずれています。vagrant-vbguest を入れると解消されます。
$ vagrant plugin install vagrant-vbguest2. GuestAdditions seems to be installed ... but not running.
[default] GuestAdditions seems to be installed (6.1.14) correctly, but not running.1と逆に、vagrant-vbguest の自動更新が邪魔をしているパターンです。Vagrantfileに以下を追加して、自動更新を止めます。
if Vagrant.has_plugin?("vagrant-vbguest") config.vbguest.auto_update = falseend3. カーネルヘッダが無くてGuest Additionsがビルドできない
VirtualBox Guest Additions: Kernel headers not found for target kernel5.4.0-73-generic. Please install them and execute /sbin/rcvboxadd setupカーネルヘッダを入れます。
$ sudo apt update && sudo apt upgrade -y$ sudo apt install -y linux-headers-genericこの後 vagrant reload すると、今度はビルドツールが無いと言われることがあります。
VirtualBox Guest Additions: Building the modules for kernel 5.4.0-77-generic.
This system is currently not set up to build kernel modules.Please install the gcc make perl packages from your distribution.不足分をまとめて入れれば解消します。
$ sudo apt install -y gcc make perl参考:Vagrantで構築したUbuntu20.04へsynced_folderを設定した際に発生するマウントエラーの対処
4. ゲストOS上で docker pull がタイムアウトする
bento/ubuntu18.04 ベースの環境でDockerを入れたときに踏みました。
$ docker pull ubuntu:18.04Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)ゲストOS側の名前解決が通っていないのが原因でした。DNSを書き換えると解消します。
$ sudo vim /etc/systemd/resolved.conf[Resolve]DNS=8.8.8.8$ sudo systemctl restart systemd-resolved5. Encoding::InvalidByteSequenceError(Windows)
Windows上の vagrant up で突然出るようになりました。
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.6/lib/vagrant/util/io.rb:32:in `encode':incomplete "\x98" on Windows-31J (Encoding::InvalidByteSequenceError)io.rb の32行目、encode("UTF-8", ...) を encode("Windows-31J", ...) に変更すれば通ります。
ただし根本原因はスナップショット名に日本語を使ったことでした。名前を英語に戻したら、io.rb を触らなくてもエラーが出なくなりました。Vagrant本体のファイルを書き換えるのはアップデートで消えるので、まずスナップショット名を疑うほうが確実です。
参考:Vagrantコマンドで Encoding::InvalidByteSequenceError - Qiita
6. VirtualBoxの画面からカーソルが戻らない
キーボード右側の Ctrl を押します。これがホストキーの初期設定です。
なお、メニューバーが消えてしまった場合は、VirtualBoxマネージャーの 仮想マシン > 設定 を開きます。
ユーザーインターフェース の項目で、メニューバー右側のチェックを入れれば元に戻ります。
おわりに
Vagrant周りのエラーは、Guest Additionsのバージョン整合で起きるものが大半でした。
vagrant-vbguest を入れる/その自動更新を止める、のどちらかでたいてい片付きます。同じエラーメッセージで検索してたどり着いた方の役に立てば幸いです。
