【问题标题】:Can't connect to VM running Django无法连接到运行 Django 的 VM
【发布时间】:2014-07-25 15:09:28
【问题描述】:

使用 VirtualBox,我有一个启用了 NAT 的 VM,运行 Centos 7。主机操作系统是 Windows 7。我似乎无法访问在 VM 内运行的 Django Web 服务器。我错过了什么?

我为虚拟机设置了两个端口转发规则:

我在来宾操作系统上启动 Django Web 服务器:

python manage.py runserver 0.0.0.0:8000

我尝试访问主机操作系统上的网页:

http://localhost:8000

谷歌浏览器给了我错误代码ERR_CONNECTION_RESET

curl 在主机操作系统上的结果:

[user@win7 ~ ]$ curl http://localhost:8000
curl: (56) Recv failure: Connection reset by peer

这是在客户操作系统上执行netstat 的结果:

[user@vm ~ ]$ netstat -na | grep 8000
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN

这是在主机操作系统(使用 Cygwin)上执行 netstat 的结果:

[user@win7 ~ ]$ netstat -na | grep 8000
  TCP    0.0.0.0:8000           0.0.0.0:0              LISTENING

还值得一提的是 SSH 规则有效。我可以毫无问题地通过 SSH 连接到机器。

【问题讨论】:

  • 您忘记提及到达http://localhost:8000 时会发生什么。有超时吗?
  • @Zopieux 结果现在在问题中。

标签: django http virtual-machine virtualbox portforwarding


【解决方案1】:

这不是解决方案,而是解决我的问题。也许这会帮助遇到与我类似的问题的任何人,并且只是希望能够连接到他们的 VM 的网络服务器。

由于 SSH 工作正常,我想我可以通过 SSH 隧道访问该网页。通过命令行执行此操作的语法是:

ssh -L <local-port>:<remote-host>:<remote-port>

所以在我的情况下,如果我想通过命令行打开隧道,我会这样做:

ssh -L 8000:127.0.0.1:8000

这将允许我浏览到http://localhost:8000 并访问该网站。

您也可以通过 PuTTY 执行此操作,但我不会在这里解释,所以请谷歌获取指南。

【讨论】:

    【解决方案2】:

    ssh 隧道是一个很好的解决方法,但问题几乎可以肯定是 CentOS 7 现在使用 firewalld 而不是 iptables 来管理访问。而且,与 iptables 不同,默认配置非常严格。

    如果

    ps -ae | grep 防火墙

    返回类似的东西

    602 ? 00:00:00 防火墙d

    您的系统运行的是 firewalld,而不是 iptables。它们不会一起运行。

    要更正您的虚拟机,以便您可以从主机访问您的 django 站点,请使用以下命令:

    firewall-cmd --zone=public --add-port=8000/tcp --permanent

    firewall-cmd --reload

    非常感谢 pablo v 在“访问虚拟机上的 django 服务器”一文中指出这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      相关资源
      最近更新 更多