Docker 容器仅监听 IPv6

我正在尝试在虚拟机中设置一个测试版的 Discourse 实例,以便进行从其他软件的导入工作。我对 Docker、Discourse 和 Ruby 都是新手,因此还不熟悉后台的运行机制。到目前为止,我已经 fork 了 discourse_docker 仓库,并按照这里的说明使用了它(使用我自己的本地 Ubuntu 虚拟机,而不是云实例):discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

设置完成后,根据 netstat 显示,我的本地虚拟机似乎以某种方式配置了容器,使得端口 80 和 443 仅在 IPv6 地址上监听。由于我在本地不使用 IPv6,因此无法访问 Discourse 实例。我该如何修正这个问题?我查看了 app.yml 文件,但其中似乎没有绑定设置。我搜索了是否有其他人遇到类似问题,只找到了一条来自 2015 年的记录,其解决方案是在容器内部更改 DNS 配置。这听起来是个糟糕的主意(Bad Idea™),所以我希望找到一个更优雅的方法。

谢谢!

您可能不需要 fork 这个仓库。

这很可能是您的虚拟主机的问题。我之前从未遇到过这种情况。

我 fork 了这个仓库,试图按照这份指南操作:

不过,我不认为这会导致任何问题。
我在 ESXi 上运行的是刚下载的 Ubuntu Server 全新安装版(来自 ubuntu.com)。这些都是非常标准的操作。

配置是在哪里决定如何绑定服务的?

默认情况下,它会绑定到所有 IP 地址。

你可以在映射端口的行中添加 IP 地址,但这很可能是虚拟机的问题。是 DigitalOcean 吗?

这里有在容器中运行导入的示例。它们可能比您链接的那个更好(但我没有查看,所以可能错了)。

不,我有自己的 VMware 主机用于运行虚拟机。无论是直接通过 IPv4 还是通过 DNS 名称访问虚拟机,我都没有遇到任何问题。只是不知为何,Docker 服务(非默认服务如 SSH 服务器)仅绑定到 :::80 和 :::443,而不是 0.0.0.0。

是否有相关的日志文件可以提供一些详细信息?

这里有在容器中运行导入的示例。它们可能比您链接的那个更好(但我没有查看,所以我也可能错了)。

好吧,到目前为止我还没有进行到导入部分。:stuck_out_tongue:
最终,我希望改进我们网站的这个导入脚本。到目前为止,我一直在尝试不同的入门指南,但我觉得目前还是先采用基本的普通安装方式比较合适。

问题出在 Docker 或你的虚拟机上。建议查阅虚拟机和 Docker 的指南,先从运行一个简单的 Hello World 容器开始。这不是 Discourse 的问题。