ฉันจะเชื่อมโยงไดเร็กทอรีโครงการ Vagrant กับ VirtualBox VM ที่มีอยู่ได้อย่างไร


133

อย่างไรก็ตามโครงการ Vagrant ของฉันได้แยกตัวเองออกจาก VirtualBox VM ดังนั้นเมื่อฉันvagrant upVagrant จะนำเข้ากล่องฐานและสร้างเครื่องเสมือนใหม่

มีวิธีเชื่อมโยงโครงการ Vagrant อีกครั้งกับ VM ที่มีอยู่หรือไม่ Vagrant เชื่อมโยง Vagrantfile ภายในกับไดเรกทอรี VirtualBox VM อย่างไร

คำตอบ:


90

คำเตือน:โซลูชันด้านล่างใช้ได้กับ Vagrant 1.0.x แต่ไม่ใช่ Vagrant 1.1+

Vagrant ใช้ไฟล์ ".vagrant" ในไดเรกทอรีเดียวกับ "Vagrantfile" เพื่อติดตาม UUID ของ VM ของคุณ ไฟล์นี้จะไม่มีอยู่หากไม่มี VM รูปแบบของไฟล์คือ JSON ดูเหมือนว่าถ้ามี VM เดียว:

{
   "active":{
      "default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
   }
}

default คือชื่อของเครื่องเสมือนเริ่มต้น (หากคุณไม่ได้ใช้การตั้งค่าหลาย VM)

หาก VM ของคุณถูกยกเลิกการเชื่อมโยงสิ่งที่คุณทำได้คือทำVBoxManage list vmsรายการ VM ทั้งหมดที่ VirtualBox รู้จักตามชื่อและ UUID จากนั้นสร้าง.vagrantไฟล์ด้วยตนเองในไดเร็กทอรีเดียวกับของคุณVagrantfileและกรอกข้อมูลให้ถูกต้อง

ดำเนินการvagrant statusเพื่อให้แน่ใจว่า Vagrant ได้รับการเปลี่ยนแปลงที่เหมาะสม

หมายเหตุ: Vagrant ไม่ได้รับการสนับสนุนอย่างเป็นทางการและ Vagrant อาจเปลี่ยนรูปแบบ.vagrantได้ตลอดเวลา แต่ใช้ได้กับ Vagrant 0.9.7 และใช้ได้กับ Vagrant 1.0


สุดยอด! ขอบคุณ. ฉันรู้สึกว่ามีบางอย่างขาดหายไป
jrdmcgr

48
สำหรับ Vagrant 1.1 UUID จะถูกเก็บไว้ในไฟล์เฉพาะเครื่องที่.vagrant/machines/{name}/{provider}/id. ในความเป็นจริงสิ่งเดียวที่มีในไฟล์คือ UUID

2
ฉันลองใช้เคล็ดลับนี้ แต่สถานะคนจรจัดรายงานสถานะว่าไม่ได้สร้างขึ้น Vagrant ขึ้นแล้วสร้าง vm ใหม่และทำงานได้ดี ถ้าฉันเปลี่ยนไฟล์ id มันจะรายงานว่าไม่ได้สร้างแม้ว่าฉันจะเปลี่ยนกลับเป็น uuid ของกล่องที่เพิ่งสร้างขึ้นก็ตาม
Reece Marsland

4
ด้วย Vagrant 1.1+ ตรวจสอบให้แน่ใจว่าคุณไม่ได้ขึ้นบรรทัดใหม่ที่ส่วนท้ายของ id ดูรายละเอียดได้ที่github.com/mitchellh/vagrant/issues/1755
Mads Mobæk

1
ฉันกำลังมองหา. vagrant ในโปรไฟล์ของฉัน (Mac) โปรดทราบว่า (อย่างน้อยสำหรับฉัน) มันอยู่ในโฟลเดอร์เดียวกับโฟลเดอร์ตำราอาหารและ VagrantFile (Vagrant version 1.4.3)
allicarn

208

สำหรับVagrant 1.6.3 ให้ทำดังต่อไปนี้:

1) ในไดเร็กทอรีที่ Vagrantfile ของคุณตั้งอยู่ให้รันคำสั่ง

VBoxManage list vms

คุณจะมีสิ่งนี้:

"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

2) ไปที่เส้นทางต่อไปนี้:

cd .vagrant/machines/default/virtualbox

3) สร้างไฟล์ชื่อidด้วย ID ของ VM xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

4) บันทึกไฟล์และเรียกใช้คนจรจัด


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/idเพื่อตรวจสอบว่า uuid นั้นถูกต้อง


4
นอกจากนี้ควรสังเกตว่าหากคุณกำลังแก้ไขidไฟล์คุณต้องเก็บไว้เป็นบรรทัดเดียว ด้วยเหตุผลบางอย่างมันไม่ชอบขึ้นบรรทัดใหม่ในตอนท้าย (โปรแกรมแก้ไขข้อความของฉันเพิ่มตามค่าเริ่มต้นดังนั้นฉันจึงมีปัญหา)
Dan2552

ฉันพบปัญหานี้เนื่องจากฉันได้เปลี่ยนชื่อโฟลเดอร์ที่อยู่ในโฟลเดอร์นี้ Vagrant ยืนยันที่จะสร้าง VM ใหม่โดยใช้ชื่อเดียวกับโฟลเดอร์แทนที่จะใช้ VM ที่มีอยู่ ฉันแก้ไขโดยการสร้าง.vagrantไฟล์ในรูปแบบ 1.0 และอัปเกรดโดยอัตโนมัติ ทันทีที่ฉันทำมันเปลี่ยนชื่อ VM เก่าเป็นชื่อไดเร็กทอรีโปรเจ็กต์ใหม่
โยนาห์

2
ฉันไม่แน่ใจว่าอะไรเป็นสาเหตุของการตัดการเชื่อมต่อโดยที่ vagrant / Machines / default / virtualbox / id ของฉันชี้ไปที่รหัสเครื่อง VirtualBox ที่ไม่ถูกต้อง ไฟล์ที่ช่วยคือ $ HOME / .VirtualBox / VirtualBox.xml มีส่วน MachineRegistry ที่มี UUID ของเครื่อง VirtualBox ที่แมปกับชื่อเครื่อง ตัวอย่างเช่น <MachineEntry uuid = "{f232f951-103b-af28-9f8d-b2ab21bs258f}" src = "$ HOME / VirtualBox VMs \ <machine-name> \ <machine-name> .vbox" />
arntg

14

วันนี้มีปัญหา.vagrantโฟลเดอร์ของฉันหายไปและพบว่ามีขั้นตอนมากกว่าการตั้งค่า id:

  1. ตั้งค่ารหัส:

    VBoxManage list vms
    

    {project-folder}/.vagrant/machines/default/virtualbox/idค้นหารหัสและตั้งอยู่ใน

    โปรดทราบว่าdefaultอาจจะแตกต่างกันถ้าตั้งอยู่ในของคุณเช่นVagrantfileconfig.vm.define "someothername"

  2. หยุดการจัดเตรียมเครื่อง:

    สร้างไฟล์ชื่อaction_provisionใน dir เดียวกันกับidไฟล์ตั้งค่าเนื้อหาเป็น: 1.5:{id}แทนที่{id}ด้วย id ที่พบในขั้นตอนที่ 1

  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

เนื่องจากฉันใช้คีย์เดียวกันฉันจึงไม่ต้องทำ setp สุดท้าย (ที่สาม) อย่างอื่นอธิบายได้ดีจริงๆและทุกอย่างสมบูรณ์แบบ
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
ฉันไม่คิดว่าจะมีค่าเริ่มต้นที่นี่เพียงแค่เว็บและฐานข้อมูลเท่านั้น ขึ้นอยู่กับ Vagrantfile มีลำดับที่ vm ถูกสร้างขึ้นก่อน
agwntr

5

ฉันใช้Vagrant 1.8.1บนOSX El Capitan

vm ของฉันไม่ได้ปิดอย่างถูกต้องเมื่อคอมพิวเตอร์ของฉันรีสตาร์ทดังนั้นเมื่อฉันพยายามvagrant upมันก็มักจะสร้าง vm ใหม่ ไม่มีวิธีแก้ปัญหาที่นี่สำหรับฉัน แต่สิ่งที่ได้ผลคือรูปแบบของคำตอบของ ingmmurillo

ดังนั้นแทนที่จะสร้างบนพื้นฐานของประชาชนจากการทำงาน.vagrant/machines/default/virtualbox/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

นี้มีการแก้ไขจาก@ คำตอบของ

เรียกใช้vagrant haltหากคุณยังไม่ได้ปิดกล่อง

จากนั้นแสดงรายการ virtualboxes ของคุณ: VBoxManage list vms

มันจะแสดงรายการ virtualboxes ทั้งหมดของคุณ ระบุช่องที่คุณต้องการจะกลับไปและคว้า ID {}ระหว่างวงเล็บปีกกาไปนี้:

จากนั้นแก้ไขไฟล์รหัสโครงการ: sudo nano .vagrant/machines/default/virtualbox/id(จากไดเรกทอรีโครงการ)

แทนที่ด้วยรหัสที่คุณคัดลอกมาจากรายการ VBs

ลองvagrant reload.

หากไม่ได้ทำงานและได้รับการอนุมัติการแขวนบน SSH (ที่ฉัน stumbled) คัดลอกคีย์สาธารณะไม่ปลอดภัยจากคอมไพล์คนจรจัด แทนที่เนื้อหาของ/.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

ใน Vagrant 1.9.1:

ฉันมี VM ใน Virtual Box ชื่อ 'Ubuntu 16.04.1' ดังนั้นฉันจึงบรรจุเป็นกล่องพเนจรด้วย:

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 และพบว่าการลบ. ล็อคในกล่องช่วยแก้ปัญหาของฉันได้

ด้วยเหตุผลบางอย่าง

vagrant halt

ไม่ได้ลบการล็อกเหล่านี้และหลังจากกู้คืนการตั้งค่าทั้งหมดของฉันใน. vagrant / machine / default / virtualbox โดยใช้ timemachine การลบการล็อกเครื่องที่ถูกต้องบูตขึ้นมา

ยังคงมีปัญหาเล็ก ๆ น้อย ๆ เพียง 1 ข้อมันบูตเข้าสู่ด้วงดังนั้นฉันต้องกด Enter หนึ่งครั้งไม่รู้ว่ายังคงมีอยู่หรือไม่ แต่ฉันจะค้นพบในไม่ช้า

ฉันใช้คนเร่ร่อน 1.7.4 และ virtualbox 5.0.2

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.