답변:
경고 : 아래 솔루션은 Vagrant 1.0.x에서는 작동하지만 Vagrant 1.1+에서는 작동 하지 않습니다 .
Vagrant는 "Vagrantfile"과 동일한 디렉토리에있는 ".vagrant"파일을 사용하여 VM의 UUID를 추적합니다. VM이 없으면이 파일이 존재하지 않습니다. 파일 형식은 JSON입니다. 단일 VM이 존재하는 경우 다음과 같습니다.
{
"active":{
"default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
}
}
default
기본 가상 머신의 이름입니다 (다중 VM 설정을 사용하지 않는 경우).
VM이 어떻게 든 연결이 끊어지면 VBoxManage list vms
VirtualBox가 이름과 UUID로 알고있는 모든 VM을 나열합니다. 그런 다음 .vagrant
사용자 Vagrantfile
와 동일한 디렉토리에 파일을 수동으로 작성 하고 내용을 올바르게 채우 십시오 .
vagrant status
Vagrant가 올바른 변경 사항을 선택했는지 확인 하십시오 .
참고 : 이것은 Vagrant가 공식적으로 지원하지 않으며 Vagrant는 .vagrant
언제든지 형식을 변경할 수 있습니다 . 그러나 이것은 Vagrant 0.9.7부터 유효하며 Vagrant 1.0에는 유효합니다.
.vagrant/machines/{name}/{provider}/id
. 실제로 파일에 포함 된 것은 UUID뿐입니다.
들어 방랑 1.6.3 다음을 수행 :
1) Vagrantfile이있는 디렉토리에서 다음 명령을 실행하십시오
VBoxManage list vms
당신은 이와 같은 것을 가질 것입니다 :
"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
2) 다음 경로로 이동하십시오.
cd .vagrant/machines/default/virtualbox
3) VM의 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx의 ID로 id 라는 파일을 작성하십시오.
4) 파일을 저장하고 vagrant up을 실행하십시오.
id
파일 을 작성하는 좋은 방법 은 입니다. echo -n '<your id here>' > id
for box in test1 test2; do virtualboxid=$(VBoxManage list vms | grep $box | cut -d' ' -f2); echo -n $virtualboxid > .vagrant/machines/$box/virtualbox/id; done
상위 버전의 솔루션은 매우 동일합니다.
그러나 먼저 .vbox 파일을 수동으로 시작하여 VBoxManage list vms
그런 다음 .vagrant/machines/default/virtualbox/id
uuid가 올바른지 확인하기 위해를 확인할 수 있습니다 .
id
파일을 편집하는 경우 파일을 한 줄로 유지해야합니다. 어떤 이유로 든 줄 바꿈이 마음에 들지 않습니다 (기본적으로 텍스트 편집기가 줄 바꿈을 추가하므로 문제가 발생했습니다).
.vagrant
1.0 형식 의 파일 을 만들어서 수정 했으며 자동으로 업그레이드했습니다. 내가하자마자 실제로 이전 VM의 이름을 새 프로젝트 디렉토리 이름으로 바꿨습니다.
오늘 문제가 발생하면 내 .vagrant
폴더가 누락되어 단순히 ID를 설정하는 것보다 몇 가지 단계가 더 있음을 발견했습니다.
ID를 설정하십시오.
VBoxManage list vms
ID를 찾아에서 설정하십시오 {project-folder}/.vagrant/machines/default/virtualbox/id
.
참고 default
하여 설정된 경우 다를 수 있습니다 Vagrantfile
예를 들어 config.vm.define "someothername"
.
머신 프로비저닝을 중지하십시오.
파일 action_provision
과 동일한 디렉토리에 이름이 지정된 파일을 작성하고 id
내용을 다음으로 설정하십시오 . 1 단계에서 찾은 id로 1.5:{id}
바꾸십시오 {id}
.
새로운 공개 / 개인 키를 설정하십시오 :
Vagrant는 저장된 개인 키를 사용 .vagrant/machines/default/virtualbox/private_key
하여 컴퓨터에 ssh합니다. 새로운 것을 생성해야합니다.
ssh-keygen -t rsa
이름을 지정하십시오 private_key
.
vagrant ssh
다음 복사 private_key.pub
로를 /home/vagrant/.ssh/authorized_keys
.
Vagrant 1.7.4로 오늘 같은 문제로 업데이트하십시오.
예를 들어, 'vip-quickstart_default_1431365185830_12124'상자를 방랑자로 연결합니다.
$ VBoxManage list
"vip-quickstart_default_1431365185830_12124" {50feafd3-74cd-40b5-a170-3c976348de27}
$ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id
다중 VM 설정의 경우 다음과 같습니다.
{
"active":{
"web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
"db":"13503bc5-76b8-4c26-95c4-32435b372212"
}
}
해당 VM을 생성하는 데 사용 된 Vagrantfile에서 vm 이름을 가져올 수 있습니다. 이 줄을 찾으십시오.
config.vm.define :web do |web_config|
이 경우 "web"은 vm의 이름입니다.
OSX El Capitan 에서 Vagrant 1.8.1 을 사용하고 있습니다.
컴퓨터를 다시 시작할 때 내 vm이 올바르게 종료되지 않았으므로 시도했을 때 vagrant up
항상 새로운 vm을 만들었습니다. 여기에는 해결책이 없습니다. 그러나 일한 것은 ingmmurillo의 답변의 변형이었습니다.
따라서 .vagrant/machines/default/virtualbox/id
실행에서 ID를 기반으로 만드는 대신 VBoxManage list vms
. 나는 ID를 업데이트해야했다..vagrant/machines/local/virtual_box/id
나는 본질적으로 나를 위해 이것을하는 하나의 라이너를 가지고있다 :
echo -n `VBoxManage list vms | head -n 1 | awk '{print substr($2, 2, length($2)-2)}'` > .vagrant/machines/local/virtualbox/id
이것은 첫 번째 상자가 실행부터 시작해야한다고 가정합니다. VBoxManage list vms
이것은 @Petecoop의 답변 에서 수정되었습니다 .
vagrant halt
상자를 아직 종료하지 않은 경우 실행하십시오 .
그런 다음 가상 상자를 나열하십시오. VBoxManage list vms
모든 가상 상자가 나열됩니다. 되돌리려는 상자를 식별하고 중괄호 사이의 ID를 가져옵니다 {}
..
그런 다음 프로젝트 ID 파일을 편집하십시오 : sudo nano .vagrant/machines/default/virtualbox/id
(프로젝트 디렉토리에서)
VB 목록에서 복사 한 ID로 바꾸십시오.
시도하십시오 vagrant reload
.
그래도 작동하지 않고 SSH 인증에 걸려 있으면 (비틀 거리는 경우) 안전하지 않은 공개 키를 vagrant git 에서 복사하십시오 . 의 내용을 교체하십시오 /.vagrant/machines/default/virtualbox/private_key
. 물론 원본을 백업하십시오 cp private_key private_key-bak
.
그런 다음을 실행하십시오 vagrant reload
. 안전하지 않은 키를 식별하여 새 키를 생성한다고 말합니다.
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
모든 준비가되어 있어야합니다.