Vagrant 프로젝트 디렉토리를 기존 VirtualBox VM과 어떻게 연결합니까?


132

어쨌든 내 Vagrant 프로젝트는 VirtualBox VM과 연결이 끊어지기 때문에 vagrant upVagrant가 기본 상자를 가져 와서 새로운 가상 머신을 생성합니다.

Vagrant 프로젝트를 기존 VM과 다시 연결하는 방법이 있습니까? Vagrant는 Vagrantfile을 VirtualBox VM 디렉토리와 어떻게 내부적으로 연결합니까?

답변:


89

경고 : 아래 솔루션은 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 vmsVirtualBox가 이름과 UUID로 알고있는 모든 VM을 나열합니다. 그런 다음 .vagrant사용자 Vagrantfile와 동일한 디렉토리에 파일을 수동으로 작성 하고 내용을 올바르게 채우 십시오 .

vagrant statusVagrant가 올바른 변경 사항을 선택했는지 확인 하십시오 .

참고 : 이것은 Vagrant가 공식적으로 지원하지 않으며 Vagrant는 .vagrant언제든지 형식을 변경할 수 있습니다 . 그러나 이것은 Vagrant 0.9.7부터 유효하며 Vagrant 1.0에는 유효합니다.


대박! 감사합니다. 뭔가 빠진 느낌이 들었습니다.
jrdmcgr

48
Vagrant 1.1의 경우 UUID는의 컴퓨터 별 파일에 저장됩니다 .vagrant/machines/{name}/{provider}/id. 실제로 파일에 포함 된 것은 UUID뿐입니다.

2
이 트릭을 시도했지만 방랑자 상태는 단순히 상태가 생성되지 않은 것으로보고합니다. 그런 다음 Vagrant up은 새로운 VM을 생성하고 잘 작동합니다. id 파일을 변경하면 방금 만든 상자의 uuid로 다시 변경하더라도 ID 파일이 생성되지 않은 것으로보고됩니다.
Reece Marsland

4
Vagrant 1.1 이상에서는 ID 끝에 줄 바꿈을 추가하지 마십시오. 참조 github.com/mitchellh/vagrant/issues/1755 자세한 내용은
MADS Mobæk에게

1
내 프로필 (.Mac)에서 .vagrant를 찾고있었습니다. (적어도 저에게는) 요리 책 폴더 및 VagrantFile과 같은 폴더에 있습니다. (Vagrant version 1.4.3)
allicarn

208

들어 방랑 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을 실행하십시오.


8
줄 바꿈 없이id 파일 을 작성하는 좋은 방법 은 입니다. echo -n '<your id here>' > id
Xiong Chiamiov

1
잘 작동합니다. 그러나 왜 이런 일이 발생합니까?
JohnnyQ

Vagrant 1.7.2에서 나를 위해 일했습니다. 감사!
Rafen

1
완벽하게 작동했습니다.
Casey Robinson

# test1 및 test2 상자 ...for box in test1 test2; do virtualboxid=$(VBoxManage list vms | grep $box | cut -d' ' -f2); echo -n $virtualboxid > .vagrant/machines/$box/virtualbox/id; done
luismartingil

48

상위 버전의 솔루션은 매우 동일합니다.

그러나 먼저 .vbox 파일을 수동으로 시작하여 VBoxManage list vms

그런 다음 .vagrant/machines/default/virtualbox/iduuid가 올바른지 확인하기 위해를 확인할 수 있습니다 .


4
또한 id파일을 편집하는 경우 파일을 한 줄로 유지해야합니다. 어떤 이유로 든 줄 바꿈이 마음에 들지 않습니다 (기본적으로 텍스트 편집기가 줄 바꿈을 추가하므로 문제가 발생했습니다).
Dan2552

Vagrant는 폴더의 이름을 바꿨 기 때문에 문제가 발생했습니다. Vagrant는 기존 VM을 사용하는 대신 폴더와 동일한 이름으로 새 VM을 생성해야한다고 주장했습니다. .vagrant1.0 형식 의 파일 을 만들어서 수정 했으며 자동으로 업그레이드했습니다. 내가하자마자 실제로 이전 VM의 이름을 새 프로젝트 디렉토리 이름으로 바꿨습니다.
Jonah

2
내 vagrant / machines / default / virtualbox / id가 잘못된 VirtualBox 컴퓨터 ID를 가리키는 연결 끊김의 원인이 무엇인지 잘 모르겠습니다. 도움이 된 파일은 $ HOME / .VirtualBox / VirtualBox.xml입니다. 여기에는 VirtualBox 시스템 UUID가 시스템 이름에 매핑 된 MachineRegistry 섹션이 있습니다. 예를 들어 <MachineEntry uuid = "{f232f951-103b-af28-9f8d-b2ab21bs258f}"src = "$ HOME / VirtualBox VMs \ <machine-name> \ <machine-name> .vbox"/>
arntg

14

오늘 문제가 발생하면 내 .vagrant폴더가 누락되어 단순히 ID를 설정하는 것보다 몇 가지 단계가 더 있음을 발견했습니다.

  1. ID를 설정하십시오.

    VBoxManage list vms
    

    ID를 찾아에서 설정하십시오 {project-folder}/.vagrant/machines/default/virtualbox/id.

    참고 default하여 설정된 경우 다를 수 있습니다 Vagrantfile예를 들어 config.vm.define "someothername".

  2. 머신 프로비저닝을 중지하십시오.

    파일 action_provision과 동일한 디렉토리에 이름이 지정된 파일을 작성하고 id내용을 다음으로 설정하십시오 . 1 단계에서 찾은 id로 1.5:{id}바꾸십시오 {id}.

  3. 새로운 공개 / 개인 키를 설정하십시오 :

    Vagrant는 저장된 개인 키를 사용 .vagrant/machines/default/virtualbox/private_key하여 컴퓨터에 ssh합니다. 새로운 것을 생성해야합니다.

    ssh-keygen -t rsa
    

    이름을 지정하십시오 private_key.

    vagrant ssh다음 복사 private_key.pub로를 /home/vagrant/.ssh/authorized_keys.


"authorized_keys"는 파일 또는 디렉토리입니까?
user2568374

그것은 파일이고, 당신이 그것을 검색하면 많은 것들을 찾을 수 있습니다, 그것은 표준 ssh 일입니다
Petecoop

같은 키를 사용했기 때문에 마지막 셋 (세 번째)을 수행 할 필요가 없었습니다. 그렇지 않으면 정말 잘 설명하고 모든 것이 완벽합니다.
Dazag

win10에서 세 번째 단계를 수행하는 방법?
navono

9

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

6

다중 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의 이름입니다.


그리고 db 는 기본 VM입니다 ??
Robert

1
나는 여기에 기본값이 없다고 생각합니다. 웹과 db 만 있습니다. Vagrantfile에 따라 vm이 먼저 빌드되는 순서가 있습니다.
agwntr

5

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


4

이것은 @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!

모든 준비가되어 있어야합니다.


3

방랑자 1.9.1에서 :

가상 상자에 'Ubuntu 16.04.1'이라는 VM이 ​​있으므로 다음과 같이 빈 상자로 패키지했습니다.

vagrant package --base "Ubuntu 16.04.1"

응답 ...

==> Ubuntu 16.04.1: Exporting VM...
==> Ubuntu 16.04.1: Compressing package to: blah blah/package.box

0

나는 macos에 있고 상자에서 .locks를 제거하면 내 문제가 해결된다는 것을 알았습니다.

몇 가지 이유

vagrant halt

이 잠금을 제거하지 않았고 timemachine을 사용하여 .vagrant / machine / default / virtualbox의 모든 설정을 복원 한 후 잠금을 제거하면 올바른 시스템이 부팅되었습니다.

단 하나의 사소한 문제가 남아 있습니다. 그럽으로 부팅되었으므로 엔터를 한 번 눌러야했습니다.

방랑자 1.7.4 및 virtualbox 5.0.2를 실행 중입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.