我在 OS X 主机上运行 VirtualBox 5.0.20。有多种客户系统,包括 Ubuntu、CentOS、Windows 和 OS X。
对于每个系统,我创建了一个实时快照(即在虚拟机运行时),其中服务器进程(Python 脚本)在端口 18812 上运行。我通过以下方式为所有虚拟机配置了端口转发:
$ VBoxManage modifyvm <vmid> --natpf1 rpyc,tcp,,18812,,18812
这样我就可以连接到localhost:18812
主机系统以连接到来宾中运行的服务器进程。
这一切都很好 - 直到我关闭虚拟机,恢复快照,然后再次启动它。服务器进程似乎仍在运行,我可以连接到它来自客人内部,但是从主机系统的连接不再起作用。
端口转发仍然有效,但使服务器进程再次可达的唯一方法似乎是在来宾中重新启动网络系统(例如通过service network-manager restart
在 Ubuntu 上运行)或重新启动服务器进程 - 这两种方法都不是很有效。理想的。
是否有设置 VirtualBox VM 的技巧,以便在恢复快照时可以立即访问在其上运行的服务器进程?无论如何,我在所有来宾系统上都注意到了这个问题,而且在简单的“服务器”(例如在某个端口上侦听的 netcat)上也注意到了这个问题。
答案1
这种情况的解决方法似乎是在启动后立即切换虚拟机的链接状态,即在命令行上执行以下操作:
$ VBoxManage startvm <vmid>
$ VBoxManage controlvm <vmid> setlinkstate1 off
$ VBoxManage controlvm <vmid> setlinkstate1 on