Docker:如何从容器中访问服务器的 public IP?

Docker: How do I access my server's public IP from within a container?

我 运行 不同的应用程序作为 linux 服务器上的 docker 容器。我可以使用 SSL 访问 docker 容器。我使用的反向代理 traefik 配置为代理子目录而不是子域。

这些是我的容器:

应用程序 A - 可通过 https://abc.xyz/a

访问

应用程序 B - 可通过 https://abc.xyz/b

访问

两个应用程序都已启动并且 运行 并且在从我的浏览器访问它们时正常工作。

现在我需要将 应用程序 B 嵌入到 应用程序 A 中。我知道我可以只使用容器的内部 IP(因为它们在同一网络上),但是,Application A 以及我的本地浏览器必须可以访问嵌入式应用程序 - 所以我需要使用面向公众的 IP/URL.

现在的问题是我根本无法从 应用程序 A 访问 https://abc.xyz/b。以下所有命令都在 Application A docker 容器内执行。

Ping 正常:

$ ping abc.xyz
64 bytes from 150.150.150.150: seq=0 ttl=64 time=0.204 ms

DNS 正常工作。

然而 wget 显示:

$ wget https://abc.xyz/b
Connecting to abc.xyz (150.150.150.150)
(Nothing happens)

我实在想不通问题出在哪里。是 traefik 还是 docker 限制?

经过更多研究,我发现它与 dockertraefik 完全无关。主机 linux 启用了防火墙 (ufw),它阻止了来自 docker 容器的请求,因为它没有正确配置。

我现在允许从容器访问并且它有效。