Ze_97 2024-05-26 00:29 采纳率: 100%
浏览 44
已结题

NAT模式下,如何从主机访问虚拟机上的web应用?

问题遇到的现象和发生背景

CentOS虚拟机中,使用 gunicorn 运行 superset,地址为:localhost:8088,运行后在虚拟机中可以通过浏览器及IP地址访问 superset 应用,如图:

img

但是在主机中,通过访问虚拟机IP地址+端口号无法访问superset应用,如图:

img

操作环境、软件版本等信息

CentOS虚拟机使用的是 NAT 模式的虚拟网卡,虚拟机的IP地址为:192.168.50.101,虚拟网卡配置为50段,宿主机IP地址为:192.168.100.163,命令行中,两者能够互相 ping 通。

尝试过的解决方法

尝试过在 NAT 设置中配置端口转发,但还是不行。

我想要达到的结果

能够从主机直接通过浏览器访问虚拟机上的 superset 应用

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-26 00:29
    关注

    引自免费微信小程序:皆我百晓生

    要解决这个问题,你需要设置NAT网络中的端口转发。根据你的描述,你已经尝试过了,但可能没有正确设置。下面是一些详细的步骤来配置NAT端口转发,以便可以从宿主机上访问虚拟机中的Superset应用。

    首先,在VMware Workstation中打开你的CentOS虚拟机的设置。找到并点击"网络适配器"选项卡。你应该看到你的虚拟机正在使用的NAT网络配置。接下来,按照以下步骤操作:

    1. 点击"高级设置"按钮。
    2. 在新窗口中,选择"端口映射"标签页。
    3. 单击"添加"按钮创建一个新的端口映射规则。
    4. 在弹出的对话框中填写以下信息:
      • "名称": 可以随意命名,例如"SupersetPortForwarding"
      • "协议": 选择"TCP"
      • "内部端口范围": 输入一个未被占用的端口号,比如8089(确保这个端口在宿主机上是空闲的)
      • "外部端口范围": 同样输入刚才选择的端口号,这里是8089
      • "目标": 输入虚拟机的内部IP地址,即192.168.50.101
      • "端口": 在这里输入Superset应用运行的端口号,也就是8088

    完成上述步骤后,关闭所有对话框并保存设置。此时,你应该已经成功设置了NAT端口转发。接下来,你需要测试从宿主机访问虚拟机上的Superset应用。

    在宿主机的浏览器中,尝试访问http://192.168.100.163:8089/login/。这里的192.168.100.163是宿主机的IP地址,而8089是我们之前在端口映射中设置的外部端口号。如果你的配置正确,你应该能看到Superset的登录界面。

    如果你仍然遇到问题,可能需要检查以下几点:

    • 宿主机的防火墙是否允许来自8089端口的流量。
    • 虚拟机中的Superset服务是否监听了所有接口(不只是localhost)。你可以在启动gunicorn时指定监听所有接口,使用命令:gunicorn --bind 0.0.0.0:8088 superset:app

    以下是gunicorn命令的代码片段:

    gunicorn --bind 0.0.0.0:8088 superset:app
    

    这将会让gunicorn监听所有可用的IP地址(包括虚拟机的内部IP)上的8088端口。

    如果还有问题,请提供更详细的错误消息,以便我能进一步协助你。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月2日
  • 已采纳回答 12月25日
  • 创建了问题 5月26日