Vagrant
Table of Contents
- homepage: http://www.vagrantup.com/
- available boxes: http://www.vagrantbox.es/
1. Getting Started
这篇文章可以作为很好的起点 http://blog.segmentfault.com/fenbox/1190000000264347
使用之前确保安装了virtualbox以及最新版本的vagrant (http://downloads.vagrantup.com/). 如果不是最新版本的vagrant可能会在读取box文件时候出错。
启动之后可以使用ssh vagrant@localhost -p2222连接上。默认帐号和密码都是vagrant, 并且是sudo权限。Vagrantfile所在的目录也会被挂载到/vagrant下面。
常用命令
- vagrant box add <name> <url> # 添加虚拟机
- vagrant init # 初始化,同时在本地目录产生Vagrantfile配置文件
- vagrant up # 启动虚拟机
- vagrant halt # 关闭虚拟机
- vagrant reload # 重启虚拟机
- vagrant ssh # SSH 至虚拟机
- vagrant status # 查看虚拟机运行状态
- vagrant destroy # 销毁当前虚拟机
- vagrant package # 将当前虚拟机打包
2. 启动多台虚拟机
http://docs.vagrantup.com/v2/multi-machine/index.html
启动多个虚拟机,并且每个虚拟机使用不同的环境
# Every Vagrant virtual environment requires a box to build off of. config.vm.define "centos" do |m| m.vm.box = "centos" end config.vm.define "debian" do |m| m.vm.box = "debian" end config.vm.define "freebsd" do |m| m.vm.box = "freebsd" end
操作这台机器的话只需要在命令之后指定机器名称即可,比如vagrant ssh centos
3. invalid byte sequence in UTF-8 (Argument Error)
添加box时候出现如下错误
➜ vm.centos vagrant box add centos ~/utils/centos65-x86_64-20140116.box ==> box: Adding box 'centos' (v0) for provider: box: Downloading: file:///home/dirlt/utils/centos65-x86_64-20140116.box /opt/vagrant/embedded/lib/ruby/2.0.0/rubygems/version.rb:163:in `=~': invalid byte sequence in UTF-8 (ArgumentError) from /opt/vagrant/embedded/lib/ruby/2.0.0/rubygems/version.rb:163:in `correct?' from /opt/vagrant/embedded/lib/ruby/2.0.0/rubygems/version.rb:192:in `initialize' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:273:in `new' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:273:in `block (2 levels) in find' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:270:in `map' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:270:in `block in find' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:416:in `block in with_collection_lock' from /opt/vagrant/embedded/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:415:in `with_collection_lock' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:263:in `find' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:81:in `block in add' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:148:in `call' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:148:in `block (3 levels) in add' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:429:in `with_temp_dir' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:130:in `block (2 levels) in add' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:429:in `with_temp_dir' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:111:in `block in add' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:416:in `block in with_collection_lock' from /opt/vagrant/embedded/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:415:in `with_collection_lock' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/box_collection.rb:100:in `add' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/action/builtin/box_add.rb:337:in `box_add' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/action/builtin/box_add.rb:130:in `add_direct' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/action/builtin/box_add.rb:106:in `call' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/action/warden.rb:34:in `call' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/action/builder.rb:116:in `call' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/action/runner.rb:66:in `block in run' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/util/busy.rb:19:in `busy' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/action/runner.rb:66:in `run' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/plugins/commands/box/command/add.rb:77:in `execute' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/plugins/commands/box/command/root.rb:61:in `execute' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/cli.rb:42:in `execute' from /opt/vagrant/embedded/gems/gems/vagrant-1.6.1/lib/vagrant/environment.rb:252:in `cli' from /opt/vagrant/bin/../embedded/gems/gems/vagrant-1.6.1/bin/vagrant:166:in `<main>'
解决办法是删除~/.vagrant.d/目录(或者是删除里面部分文件应该也行)
4. Connection timeout. Retrying
启动box时候出现如下错误,说明虚拟机一直没有成功启动
==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying... default: Error: Connection timeout. Retrying...
可以将virtualbox的GUI打开,看看具体是什么错误导致没有正常启动。在Vagrantfile里面添加
config.vm.provider :virtualbox do |vb| vb.gui = true end