无法从主机访问 VM 中的 Discourse 服务器

你好!我已按照指南在 Ubuntu 18.04 虚拟机(使用 VMware Workstation 15 Player)中成功安装了 Discourse。在虚拟机内部访问 http://localhost:3000/ 一切正常,但我无法从 Windows 10 宿主机访问。虚拟机的网络已配置为桥接模式,启动 Rails 服务器时我运行了以下命令:

bundle exec rails server --binding=0.0.0.0

然而,当我从宿主机访问 http://192.168.0.172:3000/ 时,却收到“连接被拒绝”的错误。我尝试在虚拟机内设置一个简单的 Python HTTP 服务器:

python3 -m http.server 3000

结果可以从宿主机成功访问,因此我认为这是 Discourse 特有的问题。我是否遗漏了什么?

提前感谢!

你好 @Hugo_Lol

你可能需要参考一下如何在主机和虚拟机之间设置端口转发,例如:

另一个示例:

或许你可以参考这些示例,了解如何着手解决此问题?

希望这能帮到你。

1 个赞

@neounix,谢谢你的回复。我已经将 VM 网络配置为桥接模式,并且可以通过一个简单的 Python HTTP 服务器(监听相同端口 3000 和地址 0.0.0.0)从外部访问它,但不知为何 Discourse 服务器却无法工作……:thinking:

有什么建议吗?

1 个赞

@Hugo_Lol

不客气。

我不是 Windows 用户,所以无法提供太多进一步的帮助,抱歉!

我最好的建议是查看 /var/log 中的各种 Discourse 日志文件以寻找线索。

这里的问题是 --binding 选项被完全忽略了。我在本地尝试了你的命令,并在输出中发现了这一行(输出非常嘈杂,所以很容易忽略这一行):

I, [2020-06-08T17:26:55.938086 #21001]  INFO -- : listening on addr=127.0.0.1:3000 fd=15

查看我们的 config/unicorn.conf.rb 文件,要让服务器监听 0.0.0.0,你需要设置环境变量 UNICORN_BIND_ALL=1。因此,以下命令应该可以工作:UNICORN_BIND_ALL=1 bundle exec rails server

或者,你可以使用 bin/unicorn 脚本,它接受 --host 选项,你可以用它来绑定到 0.0.0.0

9 个赞

这真解决了问题!现在可以正常工作了。非常感谢你们两位。:clap:

6 个赞

谢谢,这帮我省了不少麻烦。
我在想你是否能更新官方用户指南,将其中无法生效的 bundle exec rails server -b 0.0.0.0 解决方案替换为此方法。
我在互联网上随处可见这种写法,实在无法想象它竟然无法运行。

当然,你可以自己完成!这是一个 wiki :+1:t3:

1 个赞

谢谢兄弟!遇到了同样的问题,这个解决了!

1 个赞