#13838·vagrant

使用 libvirt 执行 vagrant destroy 会留下过时的端口转发

作者: lindes创建于 2026年8月12日更新于 2026年8月12日
标签waiting-intake

预期行为

  1. 当运行 vagrant destroy (或 vagrant destroy -f) 时,用于转发端口的 ssh 进程应被杀死,因为似乎与 vagrant halt 一样。
  2. 之后,我预期新的 vagrant up 将正确转发端口。
  3. 如果这不是可能的,我预期会生成一个错误。

实际行为

  1. vagrant up 创建了一个 ssh 进程,似乎是通过分叉自己创建的,而 vagrant haltvagrant destroy 都杀死了这两个进程的父进程,但出于某种原因,当 vagrant destroy 这样做时(可能是使用了不同的信号?),子 ssh 进程没有被杀死,从而锁定了一个最终具有过时 IP 地址的转发器,并且
  2. 在随后的 vagrant up 中无法重新启动,因为
  3. 尽管尝试启动一个新的 ssh 来转发端口,但它默默地(从 vagrant 用户的角度来看,甚至根据 --debug 日志)失败了... 尽管在 vagrant up 运行 strace -f -s 4096 ... 中显示,bind() 获得了 EADDRINUSE,因为旧进程仍然存在。

内容来源: hashicorp/vagrant