在Virtualbox/Vagrant中列出natpf规则

 手机用户2502927665 发布于 2023-01-29 11:25

我经常在运行Vagrant时遇到这样的错误:

VBoxManage: error: A NAT rule of this name already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component     NATEngine, interface INATEngine, callee nsISupports
VBoxManage: error: Context: "AddRedirect(Bstr(strName).raw(), proto,    Bstr(strHostIp).raw(), RTStrToUInt16(strHostPort), Bstr(strGuestIp).raw(),       RTStrToUInt16(strGuestPort))" at line 1524 of file VBoxManageModifyVM.cpp

我想在做之前删除所有端口转发规则vagrant up,但是我在列出natpf规则时遇到了麻烦.有没有办法vboxmanage在Vagrant中使用或通过一些设施来做到这一点?

更新:Vagrant版本1.3.4.我可以按如下方式复制问题:启动vm安装normal way(vagrant up)并在安装期间强制关闭vm(这模拟了例如安装失败).然后natpf1端口转发规则留在系统中.清理它的唯一方法是vboxmanage modifyvm #{vmid} --natpf1 delete rule_name,但是你必须事先知道规则名称...此外,规则保留在那之后vagrant destroy,似乎我的Ruby natpf1清除功能Vagrant.configure不会运行,这意味着陈旧的规则仍然与Vagrant试图创造的"新鲜"冲突相冲突.

2 个回答
  • 这完成了我的工作:

    VBoxManage showvminfo $VM_NAME --machinereadable | awk -F '[",]' '/^Forwarding/ { printf ("Rule %s host port %d forwards to guest port %d\n", $2, $5, $7); }'
    

    2023-01-29 11:27 回答
  • 我带着同样的问题来到这里; 有关删除规则的提示我发现您可以使用VirtualBox GUI查找规则并删除它们.

    当然,这仅适用于使用GUI桌面的计算机.

    打开VirtualBox管理器

    打开相关方框的设置(rmb - >设置或齿轮图标)

    Network从左侧列表中选择并打开Port Forwarding对话框

    从这里,您将能够直接删除规则.

    http://i.stack.imgur.com/6fQQc.png


    看看这些规则,它们似乎只是得到一个等于所设置端口的名称.所以你也可以查看Vagrantfile,并搜索这样一行:

    db.vm.network :forwarded_port, guest: 5432, host: 5432
    

    并猜测规则的名称将是5432.调用用于转发ssh端口22的规则的名称ssh

    $ vboxmanage modifyvm "vbox-id" --natpf1 delete "5432"
    

    2023-01-29 11:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有