vagrant における名前解決エラー時の暫定対処

たとえば VirtualBox をアップデートした後など、vagrant up 後に自動的に Guest Addition のアップデートが走ったりしますが、この際に名前解決エラーで先に進めなくなることがあります。

http://mirror.reconn.ru/remi/enterprise/7/safe/x86_64/repodata/repomd.xml: [Errno 14] curl#6 - "Could not resolve host: mirror.reconn.ru; 不明なエラー"

この状態から抜けられなくなると、vagrant コマンドではコントロールできなくなるので困ったものです。なお vagrant 実行中に無理やり Ctrl+C で落とした場合、VM がロックされてしまいます。

==> zabbix1: Clearing any previously set forwarded ports...

Command: ["modifyvm", "028aec23-0a31-4f78-9032-a555c1a0a96b", "--natpf1", "delete", "ssh"]

Stderr: VBoxManage.exe: error: The machine 'zabbix1_1600387243794_66932' is already locked for a session (or being unlocked)
VBoxManage.exe: error: Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component MachineWrap, interface IMachine, callee IUnknown
VBoxManage.exe: error: Context: "LockMachine(a->session, LockType_Write)" at line 554 of file VBoxManageModifyVM.cpp

この場合、以下のコマンドでロックを解除できるようです。

PS > vboxmanage startvm <vm-uuid> --type emergencystop

vm-uuid は vboxmanage list vms で表示できます。vboxmanage にパスが通っていない場合は Windows の「設定」で「環境変数の設定」を検索し、ユーザ環境変数 Path に C:\Program Files\Oracle\VirtualBox を追加してください。

なお、名前解決については回避策として
https://serverfault.com/questions/453185/vagrant-virtualbox-dns-10-0-2-3-not-working
があります。自分でもこれを入れることで、かなり不調となる頻度は減った気がします。

config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end

それでもやはり時々は起こるので、その際の緊急脱出方法です。

名前解決エラーは VM が出していますので、すでに OS の起動は終わっています。リモートバッチジョブの中で止まっているだけなので、とりあえず一時的に名前解決ができるようにしてやれば先に進みます。

ということで、バッチジョブが失敗し続けているのを横目で見ながら SSH で入って

$ sudo vi /etc/resolv.conf

でファイルを開き、

nameserver 10.0.2.3

になっているのを

nameserver 8.8.8.8

に変えてやれば先に進んでくれました。やれやれ。

タイトルとURLをコピーしました