【问题标题】:Vagrant destroyed on host shut down, WindowsVagrant 在主机关闭时被破坏,Windows
【发布时间】:2013-07-12 18:44:13
【问题描述】:

在 Vagrant VM 中工作并进行一些更改后,我将使用 vagrant suspend 挂起 VM。如果我然后重新启动主机,然后尝试运行 vagrant resume,终端会坐一会儿,然后将我带回命令提示符而没有任何反馈。所以,我自然而然地尝试 vagrant ssh,我收到以下信息:

VM 必须正在运行才能打开 SSH 连接。运行vagrant up启动虚拟机。

如果我运行 vagrant up,我发现我在挂起之前所做的所有更改都已被基础框导入覆盖。

这是预期的行为吗?我是流鼻涕的 Windows 8 pro x64。

【问题讨论】:

    标签: windows virtualbox vagrant


    【解决方案1】:

    vagrant 的想法是使用基本盒子,然后使用配置方法进行自定义。因此,vagrant destroy(删除 VM 的所有数据)和 vagrant up 始终基于基本框再次构建框,应该可以工作。

    无论如何,您没有执行vagrant destroy,数据应该仍然存在。

    如果您执行了vagrant suspend,则表示盒子状态已被虚拟盒子冻结。

    接下来,你应该做一个vagrant resume:http://docs.vagrantup.com/v2/cli/resume.html

    但如果您在两者之间执行了vagrant up,则数据可能会丢失。您可以打开 VirtualBox GUI,看看是否还有一些保留的快照。

    【讨论】:

    • 我又玩了一些。如果我在主机关闭之前对暂停保持警惕,我似乎没问题。感谢您的帮助。
    • 我有 Windows,它做了一些 Windows 更新,而 vagrant 在一夜之间运行并重新启动了我的整个计算机。我没有机会停止/暂停 vagrant,我回到 vagrant bin 目录,然后运行 ​​vagrant up,或者在这种情况下运行 vagrant resume?
    【解决方案2】:

    这种情况时不时发生在我身上,我重新启动后,我的流浪机器就再也没有踪迹了。即使运行vboxmanage list vms 也不会显示我的虚拟机,但是如果我再次重新启动计算机并且这次我在尝试执行vboxmanage list vms 之前打开Virtualbox GUI(或者不要先打开它,具体取决于上次尝试失败的方式)它会列出我的 Vagrant 机器及其 ID。

    有了这个 ID,我可以进入 .vagrant/machines/default/virtualbox/ 并创建一个名为“id”的文件并添加一行包含 vagrant 机器的 id。之后您可以使用vagrant up 启动它

    【讨论】:

    • 我可以在我公司的多台 Ubuntu 14.04 LTS 机器上确认这一点,可重现。这似乎是 Virtualbox 摊牌过程中的一个错误(机器未正确关闭)。
    • 我确认添加一个名为“id”并包含 VM 名称的唯一文件是可行的。您可以像这样恢复您的 VM 并检索数据。但我现在添加以下问题:==> 默认:恢复挂起的 VM...==> 默认:正在启动 VM...==> 默认:等待机器启动。默认值:SSH 地址:127.0.0.1:2222 默认值:SSH 用户名:vagrant 默认值:SSH 身份验证方法:私钥默认值:警告:连接被拒绝。正在重试... 默认值:警告:身份验证失败。正在重试... 默认值:警告:远程连接断开。正在重试...
    • 启动 vagrant up 后的正确步骤是什么。如果您重新启动/重新启动主机,您需要将其关闭或调用 vagrant halt 吗?
    【解决方案3】:

    我建议为您计划使用的每个 VM 创建一个项目目录。如果您在执行vagrant init 之前切换到该空项目目录,则会为该项目/VM 创建一个专用的Vagrantfile,然后可以根据您的需要对其进行自定义。然后,要使用自定义的Vagrantfile,只需从项目目录中运行vagrant up。不确定这是否能解决您的问题,但我想值得一试。 ;-)

    顺便说一句。您可以使用命令vagrant status [machine-name] 来检查您的虚拟机是否正在运行。

    【讨论】:

    • 所以,您在项目目录中描述的工作流程正是我现在正在做的。我有一个可以使用或修改的 VagrantFile。但问题是,如果我使用 vagrant suspend,重新启动我的机器,返回该目录并调用 vagrant resume,我无法让 VM 恢复。它告诉我需要先创建 VM。然后当我执行 vagrant up 命令时,虚拟机被重建,但它缺少我可能创建的任何数据库,
    • @spetz83 如果我正确理解 vagrant,则数据库(例如 MySQL)在 VM 上运行,但实际数据应位于主机上的共享目录中。这适用于任何需要持久化的数据。
    【解决方案4】:

    我最近遇到了一个有点类似的情况,最终发现有一种情况是“流浪者挂起”有效地破坏了虚拟机。那是在以 Virtual Box 4.3.14 作为虚拟化提供程序的 Windows 主机上运行 Vagrant。将 Virtual Box 回滚到 4.3.12 是解决此问题的一种方法。详情在这里:https://github.com/mitchellh/vagrant/issues/4276

    【讨论】:

    • 是的,VirtualBox 4.3.14/4.3.16 在 Windows 主机上似乎被严重破坏了。我遇到了同样的vagrant halt 问题,然后vagrant up 会尝试重新创建虚拟机。那会失败,因为它无法覆盖现有的,我不得不手动清理所有内容并重新开始。请在此处提供帮助以帮助解决此问题forums.virtualbox.org/viewtopic.php?f=6&t=63556
    • 顺便说一句,这也发生在 Linux 上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    相关资源
    最近更新 更多