Vagrant卡住连接超时重试

Posted

技术标签:

【中文标题】Vagrant卡住连接超时重试【英文标题】:Vagrant stuck connection timeout retrying 【发布时间】:2014-04-29 19:03:59 【问题描述】:

我的流浪汉昨晚工作得很好。我刚刚打开电脑,点击vagrant up,这就是我得到的:

==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> 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...

以前有人吃过吗? vagrant 尚未在网络上广泛报道,我找不到发生这种情况的原因。

【问题讨论】:

这种情况可能是因为 VirtualBox 未能重定向端口,尽管说 '==> default: Forwarding ports... default: 22 => 2222 (adapter 1) ' 您可以在我的问题link 中查看完整描述。我仍然不知道如何修复重定向失败(您可以查看 VirtualBox 日志。 我也有同样的问题。问题是访客机器上没有安装和启用 ssh 服务器。 我在安装 ubuntu 16.04 时遇到了同样的错误 - 通过将虚拟机升级到 5.1.x 解决了这个问题 - 请参阅 askubuntu.com/a/822974/151137 @Kiee 请检查杀毒和防火墙,暂时停止,然后你去:) 【参考方案1】:

ubuntu/bionic64

遇到了类似问题

通过启用 Vagrantfile 中的 gui,我可以使用默认的 vagrant/vagrant

登录
config.vm.provider "virtualbox" do |vb|
   vb.gui = true
end  

然后使用以下命令重置防火墙

$ ufw force --reset  

然后这次重新启动系统没有 UI 能够毫无问题地启动

确保在重置之前保留备份防火墙规则

【讨论】:

【参考方案2】:

我只是分享这个,以便将来可以帮助另一个人。上面的 rubo77 给了我这个答案的灵感。

在我的 vagrant 文件中取消注释两行后,我遇到了这个卡在连接超时循环中的问题。

vb.gui="true"
config.vm.network "forwarded_port", guest: 80, host: 8080

显然,第一行显示了 GUI,询问您是要跳过安装还是让 vagrant 手动安装。评论它允许我登录,但我仍然可以看到“连接中止”。在终端中重试。

所以我 ssh 进入我的流浪者并输入。

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

然后 vagrant reload 并没有遇到任何连接错误。但是不要接受所有传入的流量。因此,如果您要长时间使用您的 bos,您可能希望添加规则以仅允许端口 8080。

Digital Ocean 提供了一个非常好的教程,介绍如何向 iptables 添加规则。

记得安装 iptables-persistent 来保存你的防火墙配置

【讨论】:

【参考方案3】:

在我的例子中,给它一个静态 IP 地址,简单地解决了问题:

config.vm.network "private_network", ip: "192.168.50.50"

【讨论】:

【参考方案4】:

我的运行良好,然后这个“警告:远程连接断开。重试...”一遍又一遍 - 可能 20 次 - 直到它连接。根据上面的答案,我只是

vagrant destroy
vagrant up

一切都很好。我的很简单,但我通过将 Vagrantfile 减少到 config.vm.box = "ubuntu/trusty64" 来做到这一点,它仍然在这样做。所以这就是为什么破坏和重新开始似乎是最好的选择。鉴于这些 Vagrant 图像的无状态性质,我不明白为什么这在每种情况下都不起作用。我刚刚进入这个,我可能还知道那不是真的。

【讨论】:

如果您可以配置您的虚拟机,这是一个很好的解决方案。在我的例子中,构建一个虚拟机更加复杂,并且需要更多的时间。 是的,我在我的虚拟机上设置了别名和其他东西,销毁它并不是一个很好的答案 很好,我用vragant halt 尝试了很多次,但效果很好! 对我来说效果很好,我同时面临 localhost 连接重置问题和这个问题,并且再次销毁和创建 vagrant 修复了这些问题。【参考方案5】:

我正在通过在/etc/fstab 中添加一个新条目来测试我的 vagrant VM 中的已安装文件夹。后来我注销了,跑了 vagrant halt,但是当我跑vagrant up 时,我得到了:

SSH auth method: private key
Warning: Remote connection disconnect. Retrying...

我阅读了所有这些帖子并尝试了所有似乎与我的案例相关的帖子(除了 vagrant destroy,它肯定会解决我的问题,但在我的案例中是最后的手段)。 @Kiee 的帖子给了我尝试直接从 VirtualBox GUI 启动我的虚拟机的想法。在启动过程中,VM 自行停止并询问我是否想跳过安装我之前添加到/etc/fstab 的测试文件夹。 (这就是 vagrant 无法启动 VM 的原因。)在回答“NO”后,VM 启动没有问题。我登录了,从我的 fstab 中删除了顽皮的行,然后关闭了 VM。

在那之后 vagrant 就可以正常启动了。

外卖?如果突然 vagrant 无法重新启动到您的 VM,请尝试直接从提供程序(在我的情况下为 VirtualBox)启动。很有可能你的启动器因与 SSH 完全无关的东西而挂起。

【讨论】:

【参考方案6】:

这对我来说是这样的:

“vagrant up”启动虚拟机后,关闭机器并进入virtualbox中的新虚拟机设置。然后转到“网络”->“高级”

适配器类型:我从“Intel PRO XXXXX”更改为“PCNet-Fast”(或除 Intel PRO 之外的任何其他适配器都可以)

【讨论】:

【参考方案7】:

我的解决方案结果并非完全符合上述要求。我在 Windows 7 主机中以访客身份运行 Ubuntu 14。我一直在很好地运行这个 vagrant box,但是在几个月没有使用它后我再次启动它,它不断出现 SSH 连接超时。事实证明,不知何故,密钥对不起作用——所以我根据this page 上的说明将Vagrant public key 复制到了Ubuntu 中。但这还不是全部。然后我发现我的基础框中的私钥与私钥 here 不同。在将公钥放入 Ubuntu 后,将此私钥作为 vagrant_private_key 文件放入 C:\Users\your-user.vagrant.d\boxes\vagrant-box-name\nnnnnnnn\virtualbox 可解决问题。

【讨论】:

【参考方案8】:

我发现在 MacOS 上使用 VirtualBox 将其添加到 Vagrantfile 会让你走得更远:

config.vm.provider 'virtualbox' do |vb|
  vb.customize ['modifyvm', :id, '--cableconnected1', 'on']
end

【讨论】:

在研究了这个问题几个小时后,这对我有用! 很高兴为您提供帮助 :)【参考方案9】:

在 Bios 设置中检查您的 CPU 的虚拟化是否已启用。

【讨论】:

【参考方案10】:

初始启动期间的 SSH 连接超时可能与多种原因有关,例如:

检查是否在 BIOS 中启用了虚拟化(根据comment), 系统等待用户交互(例如share partition is not ready), 你的私钥不匹配(通过vagrant ssh-config检查配置), 引导过程需要更长的时间(尝试增加config.vm.boot_timeout), 它从错误的驱动器启动(例如从安装程序 ISO), VM 防火墙配置错误(例如iptables configuration), 本地防火墙规则、端口冲突或与 *** 软件冲突, sshd 配置错误。

要调试问题,请运行--debug 选项或类似:

VAGRANT_LOG=debug vagrant up

如果没有明显的问题,请尝试从另一个终端连接到它,通过vagrant ssh 或通过:

vagrant ssh-config > vagrant-ssh; ssh -F vagrant-ssh default

如果 SSH 仍然失败,请尝试使用 a GUI 运行它(例如 config.gui = true)。

如果不是,请检查正在运行的进程(例如:vagrant ssh -c 'pstree -a')或验证您的sshd_config


如果是一次性虚拟机,您可以随时尝试destroyup 再次。

您还应该考虑升级 Vagrant 和 Virtualbox。


如需更多信息,请查看Debugging and Troubleshooting 页面。

【讨论】:

【参考方案11】:

对我有用的是允许从 BIOS 在 64 位操作系统(Ubuntu 13.10)上进行 64 位虚拟化。

【讨论】:

你说的可能是 64 位虚拟化!【参考方案12】:

我对此问题的解决方案是,我的旧笔记本电脑启动时间太长了。我打开虚拟盒子,连接到盒子并等待屏幕加载。花了大约 8 分钟。

然后它连接并安装了我的文件夹并继续前进。

有时请耐心等待!

【讨论】:

【参考方案13】:

我找到的解决方案是检查连接到 NAT 的适配器 1 中的电缆连接选项。我真的不知道,这是我的第四个流浪盒子,但这是唯一一个没有选中电缆连接选项的盒子,并且在检查后,它可以工作。

【讨论】:

我正在使用 Homestead 1.0.1 和 VirtualBox 5.0.28,感谢这个答案,我解决了这个问题。 通过 GUI 我可以看到它正在等待网络接口,然后解决了问题。谢谢。s 这个固定我的+1 这解决了我的问题:Vagrant 1.9;虚拟机 5.1; Laravel/宅基地 5.3【参考方案14】:

就像这里的一些人已经指出的那样,如果 VirtualBox 映像没有正确启动,就会出现错误。对我来说,在 Vagrant 上使用 GUI 模式并没有多大帮助,因为它只显示了一个黑色窗口。在 VirutalBox GUI 中,我检查了我的 VM 上的设置,发现操作系统设置不正确(Debian 32 而不是 64 位)。

所以我只能建议手动检查虚拟机的 VirtualBox 设置并让虚拟机启动而不首先使用 Vagrant。

【讨论】:

【参考方案15】:

我在 VirtualBox 中运行 vagrant/VirtualBox 时得到了这个。我通过在主机中运行 vagrant 机器解决了这个问题。

【讨论】:

【参考方案16】:

对我来说,这是 vagrant 和 virtual box 之间的兼容性。

我在 Windows 10 上,我做了什么我卸载了 vagrant 和 virtual box

然后安装一个旧版本的虚拟盒子,特别是4.3.38版(这个版本也要安装扩展包)

然后安装最新版本的 vagrant(目前是 1.8.5)

之后就成功了。

【讨论】:

这里有同样的问题。 Virtualbox 有可用的更新。更新它,“vagrant destroy”和“vagrant up”命令修复了它。【参考方案17】:

如果您使用的是 Windows 8 或 10,这对我有用:

    更改 BIOS 设置以允许 64 位虚拟化。 方法如下: 使用高级启动重新启动电脑(转到高级启动-'立即重新启动'-'疑难解答'-'高级选项'-'UEFI 固件设置'-'重新启动') 在 BIOS 窗口内 - 转到“高级”菜单/选项卡 - 启用“英特尔虚拟技术” 保存并退出。

【讨论】:

T440p 笔记本上也一样 这里也一样。在我的机器上,这意味着启用虚拟化 Vt-x 谢谢!我的 BIOS 设置中禁用了虚拟化。我以前在同一台机器上使用过 vagrant,但由于某种原因,BIOS 设置在我不知情的情况下被更改。所以先检查一下这个设置。【参考方案18】:

我在杀死腻子进程时解决了这个问题。因为我有 git-ssh 和 putty 都在运行。他们似乎为了 ssh 访问而互相争斗。一个就够了。

【讨论】:

【参考方案19】:

这里有很多很好的答案,我无法全部阅读,但是,我也只是过来贡献了我的一点点。我有两个不同的问题:

    vagrant up 无法找到我的 ssh 'id_rsa'(因为当时我还没有): 我跑了ssh-keygen -t rsa -b 4096 -C "myemailaddress@mydomain.com",基于this GitHub's article,瞧,一步一步完成了;

    然后,我遇到了同样的问题“Warning: Connection timed out. Retrying...”,永远...: 所以,在阅读了很多之后,我重新启动了我的系统并查看了我的 BIOS(在 PC 上按 F2 到达那里),并且有 Virtualization disabled。我已启用、保存并再次启动系统,以检查它是否发生了任何变化。

在那之后,vagrant up 就像一个魅力!现在是凌晨 4 点,但它正在运行!多么酷,哈? :D 据我所知,很少有像我这样的受虐狂开发者会在 Windows 上尝试这个,特别是在 Windows 10 上,我只是不能不忘记来到这里并留下我的话......另一个重要信息是,我正在尝试设置 Laravel 5,使用 Homestead、VirtualBox、作曲家等。它成功了。所以,希望这个答案对这个问题有所帮助,并且答案对我有所帮助。我最好的祝福。再见!

【讨论】:

【参考方案20】:

如果您使用包装层(如 Kitchen CI)并且运行 32b 主机,则必须抢占安装 Vagrant 盒。它们的默认提供者是二进制的操作码“家族”。

所以在kitchen create default-ubuntu-1204 之前请确保使用:

vagrant box add default-ubuntu-1204 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-12.04-i386_chef-provisionerless.box

如果您的主机不支持字长虚拟化,则使用 32b 图像

【讨论】:

【参考方案21】:

在您的Homestead.yaml 中查找此行:

config.vm.network "forwarded_port", guest: 80, host: 8080

并更改为:

config.vm.network "forwarded_port", guest: 80, host: 8000

然后在Homestead目录下,运行:

vagrant destroy
vagrant up

看看它是否有效。

【讨论】:

【参考方案22】:

删除文件:

C:\Users\UserName\\.vagrant.d\insecure_private_key

然后运行:

vagrant up

【讨论】:

我已经在互联网上搜索了三天,并尝试了我遇到的几乎所有解决方案。只有发现它可以像这样简单。我的英雄。谢谢! +1 对我没有任何影响。我有 mac,Vagrant 1.9.3【参考方案23】:

从我的 Vagrantfile 中删除这一行后,我遇到了同样的问题:

config.vm.network "private_network", type: "dhcp"

我把这条线放回去后,VM 加载正常。

【讨论】:

我正在使用苏格兰威士忌,我所做的只是取消注释 config.vm.network 的行,它解决了问题。【参考方案24】:

我遇到了同样的问题,但其他答案都没有完全解决我的问题。 @Kiee 的回答很有帮助,虽然我在 GUI 中看到的只是 黑屏(左上角有下划线,Virtual Box 中的这个问题也已在堆栈溢出中单独提出,再次没有帮助)。

最终,一个解决方案被证明非常简单:检查版本您的虚拟机。

更准确地说,我有一个来自其他人的 64 位 Debian 的盒子,但 Virtual Box 坚持将其视为 32 位,我没有注意到。要更改它,请打开 Virtual Box,然后打开终端并运行

vagrant up

等待排队

default: SSH auth method: private key

现在您可以按 ctrl+C(或等待超时)并运行

vagrant halt

您的虚拟机不会被破坏,因此您可以在 Virtual Box 的菜单中看到它,但会关闭电源,因此您可以更改设置。在菜单中选择您的机器,单击“设置”->“常规”并选择正确的“版本”,对我来说它是“Debian(64 位)”。在此之后再次输入vagrant up

如果您遇到这种情况(或“设置”中的不同更改解决了您的问题),您可以从修复后的输入中创建新框

vagrant package --output mynew.box

更多细节:主机 32 位 Ubuntu 12.04、来宾 64 位 Debian 8.1、Virtual Box 5.0.14、Vagrant 1.8.1

【讨论】:

我也遇到了同样的情况,为此我损失了一天,我的下拉菜单中也没有 64 位,所以我检查了fixedbyvonnie.com/2014/11/… 并解决了它【参考方案25】:

我也遇到过同样的问题。我通过从BIOS 设置启用Virtualization 解决了这个问题。

【讨论】:

反直觉地,在我的 BIOS 中,我不得不禁用虚拟化并启用 VT-X。尝试在 BIOS 中切换这些设置。【参考方案26】:

这个帖子中没有提到我必须解决这个问题的方法,所以我在这里发布详细信息,以防它帮助其他人。

造成这种情况的原因是 vagrant 在启动后无法 ssh 进入机器。这有多种原因,如该线程中所述,例如机器无法一直启动,或者 iptables 防火墙阻止 SSH。

就我而言,问题在于我无意中设置了一个“private_network”,其 IP 地址与内置 VirtualBox NAT 网络(在我的情况下为 10.0.2.0/24)位于同一子网中。这弄乱了机器的 NAT 网络(但在任何地方都没有显示错误),并且由于 vagrant 通过 NAT 网络连接,即使机器正在运行并且没有启用防火墙,它也无法连接。

Vagrant.configure("2") do |config|
  config.vm.network "private_network", ip: "10.0.2.31"
end

修复方法是更新我的 VagrantFile 并使用与 VirtualBox 的 NAT 网络不冲突的“private_network”IP。

Vagrant.configure("2") do |config|
  config.vm.network "private_network", ip: "10.0.4.31"
end

【讨论】:

【参考方案27】:

我通过输入ˆC(或Windows 上的ctrl+C)两次并退出连接失败屏幕来解决。

然后,我可以通过 SSH (vagrant ssh) 连接并自己查看错误。

在我的例子中,路径输入错误。

【讨论】:

【参考方案28】:

为 VMware 提供商的用户提供的另一种可能的解决方案: 对我来说,在同一台主机上删除 VirtualBox 的并行安装后,这个问题得到了解决。 VMware 和 VirtualBox 之间的网络接口显然存在冲突

【讨论】:

【参考方案29】:

也许这是一个太简单的答案,无法帮助很多人,但如果你还没有,则值得尝试:执行“vagrant halt”而不是“vagrant suspend”,然后使用“vagrant up”重新启动 VM。

我认为我的问题是由于某些“kworker”进程出现错误并且在 VM 中不断超时,因此硬重启似乎可以正确地重新加载进程,而保存和恢复只是恢复损坏的进程。状态。

【讨论】:

哇。最后。这对我有用。我正在使用窗口 7。@Ambulare 谢谢!【参考方案30】:

就我个人而言,Tunnelblick *** 软件阻止了连接。现在,当我启动新虚拟机时,我会暂时禁用 Tunnelblick。

【讨论】:

以上是关于Vagrant卡住连接超时重试的主要内容,如果未能解决你的问题,请参考以下文章

使用 Serverless Aurora 时 Sequelize 连接超时,寻找增加超时持续时间或重试连接的方法

uniapp打开页面显示--连接服务器超时,请点击重试

MySQL数据库连接重试功能和连接超时功能的DB连接Python实现

java客户端调用webservice时 连接超时知道是网络原因 ,如何重试如果不重试程序就死琐了,

Python Scrapy 不会重试超时连接

增加 TCP 套接字超时与手动重试套接字连接之间有区别吗?