Cách xuất máy ảo Vagrant để chuyển nó


107

Tôi có một hộp vagrant đang chạy (được định cấu hình với ngăn xếp LAMP). Tôi cần chuyển nó sang một PC khác. Làm thế nào tôi có thể xuất nó? Tôi đoán rằng tôi có thể nhận được một tệp (hoặc các tệp) có thể được sao chép sang một PC khác, vì vậy ở đó tôi có thể chạy một số lệnh để nhập hộp vagrant.


1
Tôi đã viết một số tập lệnh để tự động chuyển các hộp lang thang. Xem soniah / transfer_vagrant_boxes
Sonia Hamilton

//, Có ai đã thử script của Sonia chưa?
Nathan Basanese

@NathanBasanese AFAIU, những kịch bản giúp đỡ hộp cơ sở chuyển giao, không phải là kết quả chạy máy ảo, vì họ tận dụng lang thang repackage hộp (xem tài liệu của nó)
Olivier Berger

Câu trả lời:


119

Bạn có hai cách để làm điều này, tôi sẽ gọi nó là cách bẩncách sạch :

1. Con đường bẩn thỉu

Tạo một hộp từ môi trường ảo hiện tại của bạn, sử dụng vagrant packagelệnh:

http://docs.vagrantup.com/v2/cli/package.html

Sau đó sao chép hộp vào máy tính khác, thêm nó bằng cách sử dụng vagrant box addvà chạy nó vagrant upnhư bình thường.

Hãy nhớ rằng các tệp trong thư mục làm việc của bạn (tệp có dấu Vagrantfile) được chia sẻ khi máy ảo khởi động, vì vậy bạn cũng cần sao chép nó sang máy tính khác.

2. sạch đường

Về mặt lý thuyết, không bao giờ cần thiết phải xuất / nhập với Vagrant. Nếu bạn có tầm nhìn xa trong việc sử dụng cấp phép để định cấu hình môi trường ảo (đầu bếp, con rối, ansible) và hệ thống kiểm soát phiên bản như git cho thư mục làm việc của mình, thì việc sao chép môi trường tại thời điểm này sẽ đơn giản như chạy:

git clone <your_repo>
vagrant up

5
Cố gắng trở thành quản trị viên sạch sẽ , có tầm nhìn xa đó ... Bạn không cần phải đặt iso cài đặt hệ điều hành trong kho git của mình phải không? Bạn có đang gợi ý điều đó không, chẳng hạn. bằng cách sử dụng ansible, repo của bạn sẽ chứa Vagrantfile và một playbook có thể trả được. Vagrantfile sẽ 1. tải xuống hộp cơ sở từ vagrantcloud 2. chạy playbook ansible để cung cấp / định cấu hình hộp cơ sở sử dụng các tệp / kho lưu trữ đám mây / tệp khác. Đúng? Hay có thứ gì khác trong git repo?
hobs

8
Có tài khoản "cách sạch sẽ" cho cơ sở dữ liệu (mySQL, Wordpress) có thể nằm trong vm không? Làm thế nào mà nó có thể được đồng bộ hóa với máy tính khác?
kevllar

1
@kevllar Cách rõ ràng có nghĩa là không có thông tin bên ngoài kho lưu trữ git được yêu cầu để bắt đầu một môi trường phát triển mới. Điều này ngụ ý rằng việc cài đặt và cấu hình cơ sở dữ liệu sẽ được hoàn tất trong quá trình cung cấp hộp vagrant mới (thông qua Chef / Puppet / what-have-you).
Hovis Biddle

2
Vậy phải chăng cách mà Hashicorp khuyến cáo cũng 'bẩn'? tức là đóng gói hộp và tải nó lên máy chủ tập bản đồ? Tôi không chắc chắn nếu cách 'sạch' sẽ thực sự tái tạo môi trường chính xác, mà tôi nghĩ là toàn bộ mục đích lang thang ....
sijpkes

1
Không hiểu đường lối chính thống như thế nào lại bị coi là bẩn. Bất kỳ linh hồn tốt có thể giải thích tại sao?
thclpr

28

Ổ cứng trên máy Mac của tôi phát ra tiếng bíp khi đang làm dự án nên tôi quyết định lắp ổ SSD. Tôi cần di chuyển dự án của mình từ đĩa này sang đĩa khác. Một số điều cần xem xét:

  • Tôi lang thang với virtualbox trên máy Mac
  • Tôi đang sử dụng git

Đây là những gì làm việc cho tôi:

1.) Copy your ~/.vagrant.d directory to your new machine.
2.) Copy your ~/VirtualBox\ VMs directory to your new machine. 
3.) In VirtualBox add the machines one by one using **Machine** >> **Add**
4.) Run `vagrant box list` to see if vagrant acknowledges your machines. 
5.) `git clone my_project`
6.) `vagrant up`

Tôi gặp một số vấn đề với việc bổ sung VB Guest.

nhập mô tả hình ảnh ở đây

Tôi đã sửa chúng bằng giải pháp này .


//, tôi sẽ thử cái này, @KJPrince. Cảm ơn vì đã chia nhỏ nó cho chúng tôi.
Nathan Basanese

//, tôi đã thử nhưng gặp lỗi ở liên kết sau khi sao chép qua thư mục VirtualBoxVMs của mình qua ~ / VirtualBox \ VMs và chạy vagrant box list: 0bin.net/paste/iCiaqNhU-i3bbfY2#-KDiXYcRFni1RNgNJhOBrIs/…
Nathan Tiếng Basanese

18

Điều này thực sự khá đơn giản

  1. Cài đặt hộp ảongười lang thang trên máy từ xa
  2. Kết thúc máy lang thang của bạn

    vagrant package --base [machine name as it shows in virtual box] --output /Users/myuser/Documents/Workspace/my.box

  3. sao chép hộp vào điều khiển từ xa của bạn

  4. đóng hộp trên máy từ xa của bạn bằng cách chạy

    vagrant init [machine name as it shows in virtual box] /Users/myuser/Documents/Workspace/my.box

  5. Chạy vagrant up


1
Nếu tên của máy tính của bạn dài và bạn quá lười biếng để nhìn vào VirtualBox GUI và gõ nó tên hoặc id - bạn có thể liệt kê tất cả các tên của máy ảo của bạn và id với lệnh terminal này: VBoxManage list vms. Sau khi bạn có thể sao chép và thực hiện những gì được hướng dẫn trong @Phil bước thứ 2 và thứ 4. :) Yey.
Sid

@Sid tại sao không chỉ là danh sách hộp $ vagrant
Ken Ratanachai S.

@KenRatanachaiS vì lệnh của bạn liệt kê các hộp, ví dụ: ( scotch/box (virtualbox, 3.0)). Lệnh của tôi - máy ảo có mã định danh, ví dụ:"Win10 - SandBox" {bc251c06-501f-4c0f-bgfa-21f2815ba2cd}
Sid


2

Không có câu trả lời nào ở trên phù hợp với tôi. Tôi đã 2 ngày tìm cách di chuyển Máy Vagrant + VirtualBox từ máy tính sang máy tính khác ... Có thể!

Trước tiên, bạn cần hiểu rằng máy ảo được tách biệt khỏi thư mục đồng bộ / chia sẻ của bạn. Vì vậy, khi bạn đóng gói máy của mình, bạn đang đóng gói nó mà không có tệp của bạn, nhưng với cơ sở dữ liệu.

Bạn cần gì để làm:

1- Mở CMD của máy chủ 1 máy tính của bạn (Dòng lệnh. Mở nó với tư cách Quản trị viên bằng nút bên phải -> "Chạy với tư cách quản trị viên") và chuyển đến các tệp đã cài đặt vagrant của bạn. Trong trường hợp của tôi: C: / VVV Bạn sẽ thấy Vagrantfile của mình cũng có các thư mục sau:

/config/
/database/
/log/
/provision/
/www/
Vagrantfile
...

Thư mục / www / là nơi tôi có Thư mục Đồng bộ hóa với các miền phát triển của mình. Bạn có thể có thư mục đồng bộ hóa của mình ở một nơi khác, chỉ cần đảm bảo hiểu bạn đang làm gì. Ngoài ra / config và / database là các thư mục đồng bộ.

2- chạy lệnh này: vagrant package --vagrantfile Vagrantfile

(Lệnh này thực hiện một gói máy ảo của bạn bằng cách sử dụng cấu hình Vagrantfile.)

Đây là những gì bạn có thể đọc trên tài liệu Vagrant về lệnh:

Một quan niệm sai lầm phổ biến là tùy chọn --vagrantfile sẽ đóng gói một Vagrantfile được sử dụng khi sử dụng vagrant init với hộp này. Đây không phải là trường hợp. Thay vào đó, tệp Vagrantfile được tải và đọc như một phần của quá trình tải Vagrant khi hộp được sử dụng. Để biết thêm thông tin, hãy đọc về thứ tự tải Vagrantfile.

https://www.vagrantup.com/docs/cli/package.html

Khi hoàn tất, bạn sẽ có một tệp package.box.

3- Sao chép tất cả các tệp này (/ config, / database, Vagrantfile, package.box, v.v.) và dán chúng vào Máy tính 2 của bạn ngay nơi bạn muốn cài đặt máy ảo của mình (trong trường hợp của tôi là D: / VVV).

Bây giờ bạn có một bản sao của mọi thứ bạn cần trên máy chủ 2 máy tính của bạn.

4- chạy cái này: vagrant box add package.box --name VVV

(--Name được sử dụng để đặt tên cho máy ảo của bạn. Trong trường hợp của tôi, nó có tên là VVV) (Bạn có thể sử dụng --force nếu bạn đã có một máy ảo với tên này và muốn ghi đè nó. (Sử dụng cẩn thận!))

Thao tác này sẽ giải nén Máy ảo lang thang mới của bạn.

5- Khi hoàn thành, chạy: vagrant up

Máy sẽ cài đặt và bạn sẽ thấy nó trên "Oracle virtual machine box manager". Nếu bạn không thể thấy máy ảo, hãy thử chạy hộp Oracle VM với tư cách quản trị viên (nhấp chuột phải -> Chạy với tư cách quản trị viên)

Bây giờ bạn có thể có mọi thứ ổn nhưng hãy nhớ xem máy chủ của bạn có như bạn mong đợi không:

c:/windows/system32/hosts

6- Có thể bạn nên sao chép tệp máy chủ từ Máy tính 1 sang Máy tính 2. Hoặc sao chép các dòng bạn cần. Trong trường hợp của tôi, đây là những máy chủ tôi cần:

192.168.50.4 test.dev
192.168.50.4 vvv.dev
...

Trong đó 192.168.50.4 là IP của máy ảo của tôi và test.dev và vvv.dev đang phát triển các máy chủ.

Tôi hy vọng điều này có thể giúp bạn :) Tôi sẽ rất vui nếu bạn phản hồi thông tin của bạn.

Một số đặc điểm của trường hợp của tôi mà bạn có thể tìm thấy:

Khi tôi chạy lang thang, có vấn đề với mysql, nó không hoạt động. Tôi phải chạy trên Máy chủ ảo (nhấp chuột phải vào máy ảo oracle -> Hiển thị bảng điều khiển):apt-get install mysql-server

Sau đó, tôi chạy lại một lần nữa và mọi thứ đều hoạt động nhưng không có dữ liệu trên cơ sở dữ liệu. Vì vậy, tôi đã thực hiện mysqldump tất cả các bảng từ Máy tính 1 và tải chúng lên Máy tính 2.

LƯU Ý KHÁC: Máy ảo của tôi không chính xác trên Máy tính 1 và Máy tính 2. Ví dụ: một thời gian trước, tôi đã thực hiện cấu hình nội bộ để sử dụng NFS (để tăng tốc các thư mục đồng bộ hóa máy chủ) và tôi cần chạy lại lệnh này trên Máy tính 2 tổ chức:vagrant plugin install vagrant-winnfsd



0

Kể từ năm 2019, có một lệnh phụ: vagrant box repackage

vagrant box repackage --help 
Usage: vagrant box repackage <name> <provider> <version>
    -h, --help                       Print this help

Bạn có thể tìm name providerversionbằng cách chạyvagrant box list

vagrant box list
macinbox (virtualbox, 10.14.5)

Phần mở rộng của vagrant box repackagelà một tệp được gọi package.boxvề cơ bản là tệp tgz mà nội dung có thể được liệt kê như dưới đây:

tar tzf package.box
./metadata.json
./box.ovf
./Vagrantfile
./box-disk001.vmdk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.