为什么Vagrantconfiguration的AWS实例一旦出现就会终止?

我的stream量调配AWS实例将立即终止。

这是我的configuration文件:

config.vm.box = "aws-dummy" config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box" config.vm.synced_folder "./", "/vagrant", type: "rsync" config.vm.provider :aws do |aws, override| aws.access_key_id = "MY ID" aws.secret_access_key = "MY SECRET KEY GOES HERE" aws.keypair_name = "cb" aws.ami = "ami-f77fbeb3" aws.instance_ready_timeout = 300 aws.instance_type = "t2.small" aws.tags = { "Name" => "VagrantUniversal", } aws.associate_public_ip = true aws.availability_zone = "us-west-1a" aws.subnet_id = "subnet-f2245XXX" aws.private_ip_address = "10.1.10.10" aws.security_groups = [ 'sg-4084dXXX' ] # aws.region = "us-west-1" # aws.block_device_mapping = [{ 'DeviceName' => '/dev/sda1', 'Ebs.VolumeSize' => 50 }] override.ssh.username = "centos" override.ssh.private_key_path = "../keys/cb.pem" end 

我拿出configuration部分来消除这种可能性。 我也试过注释synced_folder

从日志:

  INFO interface: info: Machine is booted and ready for use! INFO interface: info: ==> default: Machine is booted and ready for use! ==> default: Machine is booted and ready for use! INFO warden: Calling IN action: #<Proc:0x00000100a3d5f8@/opt/vagrant/embedded/gems/gems/vagrant-1.7.4/lib/vagrant/action/warden.rb:94 (lambda)> INFO warden: Calling IN action: #<Vagrant::Action::Builtin::Call:0x000001028a1058> INFO runner: Preparing hooks for middleware sequence... INFO runner: 3 hooks defined. INFO runner: Running action: machine_action_up #<Vagrant::Action::Builder:0x00000100a4e290> INFO warden: Calling IN action: #<VagrantPlugins::AWS::Extras::Action::DNS::ProviderIsAWS:0x00000100a57368> INFO warden: Calling OUT action: #<VagrantPlugins::AWS::Extras::Action::DNS::ProviderIsAWS:0x00000100a57368> INFO runner: Preparing hooks for middleware sequence... INFO runner: 3 hooks defined. INFO runner: Running action: machine_action_up #<Vagrant::Action::Warden:0x00000100a859e8> INFO warden: Calling IN action: #<Proc:0x000001023ca7f0@/opt/vagrant/embedded/gems/gems/vagrant-1.7.4/lib/vagrant/action/warden.rb:94 (lambda)> INFO warden: Calling IN action: #<VagrantPlugins::AWS::Action::ConnectAWS:0x00000100a85970> INFO connect_aws: Connecting to AWS... INFO warden: Calling IN action: #<VagrantPlugins::AWS::Action::ReadSSHInfo:0x00000102968220> INFO warden: Calling IN action: #<VagrantPlugins::AWS::Extras::Action::DNS::ConnectAWS:0x000001029a1160> INFO warden: Calling IN action: #<VagrantPlugins::AWS::Extras::Action::DNS::Set:0x000001029da5f0> ERROR warden: Error occurred: undefined method `records' for nil:NilClass INFO warden: Beginning recovery process... INFO warden: Recovery complete. INFO warden: Beginning recovery process... INFO warden: Recovery complete. INFO warden: Beginning recovery process... INFO warden: Recovery complete. INFO warden: Beginning recovery process... INFO warden: Recovery complete. ERROR warden: Error occurred: undefined method `records' for nil:NilClass INFO warden: Beginning recovery process... INFO warden: Recovery complete. ERROR warden: Error occurred: undefined method `records' for nil:NilClass INFO warden: Beginning recovery process... INFO warden: Calling recover: #<Vagrant::Action::Builtin::Call:0x000001028a1058> INFO warden: Beginning recovery process... INFO warden: Recovery complete. INFO warden: Calling recover: #<Vagrant::Action::Builtin::Call:0x000001028a10a8> INFO warden: Beginning recovery process... INFO warden: Calling recover: #<VagrantPlugins::AWS::Action::RunInstance:0x00000100a17650> INFO machine: Calling action: read_state on provider AWS (i-41bcaa81) INFO runner: Preparing hooks for middleware sequence... INFO runner: 2 hooks defined. INFO runner: Running action: machine_action_read_state #<Vagrant::Action::Builder:0x00000104342c90> INFO warden: Calling IN action: #<Vagrant::Action::Builtin::ConfigValidate:0x000001043480a0> INFO warden: Calling IN action: #<VagrantPlugins::AWS::Action::ConnectAWS:0x00000104348028> INFO connect_aws: Connecting to AWS... INFO warden: Calling IN action: #<VagrantPlugins::AWS::Action::ReadState:0x000001043a9f30> INFO warden: Calling OUT action: #<VagrantPlugins::AWS::Action::ReadState:0x000001043a9f30> INFO warden: Calling OUT action: #<VagrantPlugins::AWS::Action::ConnectAWS:0x00000104348028> INFO warden: Calling OUT action: #<Vagrant::Action::Builtin::ConfigValidate:0x000001043480a0> INFO runner: Preparing hooks for middleware sequence... INFO runner: 3 hooks defined. INFO runner: Running action: machine_action_up #<Vagrant::Action::Builder:0x000001009a6068> INFO warden: Calling IN action: #<Vagrant::Action::Builtin::Call:0x000001009b4e60> INFO runner: Preparing hooks for middleware sequence... INFO runner: 3 hooks defined. INFO runner: Running action: machine_action_up #<Vagrant::Action::Builder:0x00000100a1f0a8> INFO warden: Calling IN action: #<Vagrant::Action::Builtin::DestroyConfirm:0x00000100a1c290> INFO warden: Calling OUT action: #<Vagrant::Action::Builtin::DestroyConfirm:0x00000100a1c290> INFO runner: Preparing hooks for middleware sequence... INFO runner: 3 hooks defined. INFO runner: Running action: machine_action_up #<Vagrant::Action::Warden:0x00000100a54dc0> INFO warden: Calling IN action: #<Proc:0x00000100a96d88@/opt/vagrant/embedded/gems/gems/vagrant-1.7.4/lib/vagrant/action/warden.rb:94 (lambda)> INFO warden: Calling IN action: #<Vagrant::Action::Builtin::ConfigValidate:0x00000100a54d48> INFO warden: Calling IN action: #<Vagrant::Action::Builtin::Call:0x00000100a54d20> INFO runner: Preparing hooks for middleware sequence... INFO runner: 3 hooks defined. INFO runner: Running action: machine_action_up #<Vagrant::Action::Builder:0x000001029bb920> INFO warden: Calling IN action: #<VagrantPlugins::AWS::Action::IsCreated:0x000001029b8180> INFO machine: Calling action: read_state on provider AWS (i-41bcaa81) INFO runner: Preparing hooks for middleware sequence... INFO runner: 2 hooks defined. INFO runner: Running action: machine_action_read_state #<Vagrant::Action::Builder:0x00000101036a40> INFO warden: Calling IN action: #<Vagrant::Action::Builtin::ConfigValidate:0x0000010283bd20> INFO warden: Calling IN action: #<VagrantPlugins::AWS::Action::ConnectAWS:0x0000010283baf0> INFO connect_aws: Connecting to AWS... INFO warden: Calling IN action: #<VagrantPlugins::AWS::Action::ReadState:0x000001022c69f8> INFO warden: Calling OUT action: #<VagrantPlugins::AWS::Action::ReadState:0x000001022c69f8> INFO warden: Calling OUT action: #<VagrantPlugins::AWS::Action::ConnectAWS:0x0000010283baf0> INFO warden: Calling OUT action: #<Vagrant::Action::Builtin::ConfigValidate:0x0000010283bd20> INFO warden: Calling OUT action: #<VagrantPlugins::AWS::Action::IsCreated:0x000001029b8180> INFO runner: Preparing hooks for middleware sequence... INFO runner: 3 hooks defined. INFO runner: Running action: machine_action_up #<Vagrant::Action::Warden:0x000001040a93a8> INFO warden: Calling IN action: #<Proc:0x0000010432b7c0@/opt/vagrant/embedded/gems/gems/vagrant-1.7.4/lib/vagrant/action/warden.rb:94 (lambda)> INFO warden: Calling IN action: #<VagrantPlugins::AWS::Action::ConnectAWS:0x000001040a9218> INFO connect_aws: Connecting to AWS... INFO warden: Calling IN action: #<VagrantPlugins::AWS::Action::ElbDeregisterInstance:0x00000104179990> INFO warden: Calling IN action: #<VagrantPlugins::AWS::Action::TerminateInstance:0x000001028962e8> INFO interface: info: Terminating the instance... INFO interface: info: ==> default: Terminating the instance... ==> default: Terminating the instance... INFO machine: New machine ID: nil INFO warden: Calling IN action: #<Vagrant::Action::Builtin::ProvisionerCleanup:0x000001042392b8> INFO warden: Calling IN action: #<Proc:0x000001042c1258@/opt/vagrant/embedded/gems/gems/vagrant-1.7.4/lib/vagrant/action/warden.rb:94 (lambda)> 

…这里是没有debugging信息的日志的要点:

 ==> default: Launching an instance with the following settings... ==> default: -- Type: t2.small ==> default: -- AMI: ami-f77fbeb3 ==> default: -- Region: us-west-1 ==> default: -- Availability Zone: us-west-1a ==> default: -- Keypair: cb ==> default: -- Subnet ID: subnet-f2245XXX ==> default: -- Private IP: 10.1.10.10 ==> default: -- Security Groups: ["sg-4084dXXX"] ==> default: -- Block Device Mapping: [] ==> default: -- Terminate On Shutdown: false ==> default: -- Monitoring: false ==> default: -- EBS optimized: false ==> default: -- Assigning a public IP address in a VPC: true ==> default: Waiting for instance to become "ready"... ==> default: Waiting for SSH to become available... ==> default: Machine is booted and ready for use! ==> default: Terminating the instance... /Users/swirsky/.vagrant.d/gems/gems/vagrant-aws-extras-0.1.0/lib/vagrant-aws-extras/action/dns.rb:61:in `call': undefined method `records' for nil:NilClass (NoMethodError) 

我运行的stream浪汉v1.7.4,vagrant-aws(0.6.0),vagrant-aws-extras(0.1.0),ruby 2.0.0p481

如果我删除vagrant-aws-extras插件,我得到这个奇怪的消息:

mkdir -p'/ vagrant'

标准输出命令:

斯德哥尔从命令:

sudo:抱歉,你必须有一个tty来运行sudo

以下SSH命令以非零退出状态响应。 stream浪者认为这意味着命令失败! mkdir -p'/ vagrant'

标准输出命令:

从指令stderr:sudo:抱歉,你必须有一个tty来运行sudo

这可能可能是一个vagrant-aws-extras插件的bug,因为其他人也报告了这个问题,请参阅: GH vagrant-aws#442 。 或者可能是你的图像框的configuration错误。

既然你不清楚你调用了哪个命令,但是如果你正在调用vagrant reload ,那么它会终止你的实例,因为它只是运行一个halt然后是一个up ,所以这是正常的。 然而,问题在于它不能正常启动,因为有以下错误:

sudo:抱歉,你必须有一个tty来运行sudo

我有类似的问题reload已经在GHstream浪#7244报告 。

所以解决方法是销毁机器并重新configuration。 或者,如果您想在正在运行的实例上再次运行置备,则只需运行vagrant provision即可避免调用shutdown命令。

这也可能是问题不是由它自己的关机命令造成的,但上面的错误是由于运行mkdir -p '/vagrant'

最好的方式是使用sudo不需要tty的图像。 否则,将图像configuration为不需要密码,因为Vagrant默认情况下假定sudo命令不需要input密码。

另外从/etc/sudoers注释Defaults requiretty可能会有所帮助。 或者使用config.ssh.pty = true选项来获得一个tty。

请参阅: stream浪汉的GH#1482 – 无法在需要tty运行sudo的机器上执行sudo命令