使用 libvirt 执行 vagrant destroy 会留下过时的端口转发
作者: lindes创建于 2026年8月12日更新于 2026年8月12日
标签waiting-intake
预期行为
- 当运行
vagrant destroy(或vagrant destroy -f) 时,用于转发端口的ssh进程应被杀死,因为似乎与vagrant halt一样。 - 之后,我预期新的
vagrant up将正确转发端口。 - 如果这不是可能的,我预期会生成一个错误。
实际行为
vagrant up创建了一个ssh进程,似乎是通过分叉自己创建的,而vagrant halt和vagrant destroy都杀死了这两个进程的父进程,但出于某种原因,当vagrant destroy这样做时(可能是使用了不同的信号?),子ssh进程没有被杀死,从而锁定了一个最终具有过时 IP 地址的转发器,并且- 在随后的
vagrant up中无法重新启动,因为 - 尽管尝试启动一个新的
ssh来转发端口,但它默默地(从 vagrant 用户的角度来看,甚至根据--debug日志)失败了... 尽管在vagrant up运行strace -f -s 4096 ...中显示,bind()获得了EADDRINUSE,因为旧进程仍然存在。
内容来源: hashicorp/vagrant