我可以让我的 Docker Python HTTPD 监听外部 IP,但不能监听外部 docker。为什么?

我可以让我的 Docker Python HTTPD 监听外部 IP,但不能监听外部 docker。为什么?

我不确定这是否相关,但我正在使用 Oracle Compute 实例之一,并且正在使用 Ubuntu 22.04 实例。我已打开正确的端口,以便服务器可供外界访问。

现在,奇怪的是:我尝试以下命令。

sudo python3 -m http.server --bind 0.0.0.0 80

我尝试从外部机器访问它

wget <myip>:80

--2022-11-10 17:39:27--  http://<myip>/
Connecting to   <myip>:80... failed: Connection refused.

接下来我尝试这样做:

docker run -p 80:80 -it --entrypoint /bin/sh python:slim
# python3 -m http.server --bind 0.0.0.0 80

现在,令人惊讶的是,wget 可以工作了。

wget <myip>:80

Connecting to <myip>:80... connected.
HTTP request sent, awaiting response... 200 OK

所以,我的问题是,为什么我会看到这个?如何让docker外部的Python HTTP服务器监听外部世界?

连接到 168.138.101.164:80...已连接。HTTP 请求已发送,正在等待响应...200 OK

作为参考,这是我在 Oracle 云中的 Ingress 配置。

Oracle Cloud 中的我的 Ingress 配置

我被派到这里堆栈溢出

答案1

按照@Gerald Schneider 的建议回答我的问题,因为这是 Oracle 云计算实例的新安装,所以其他人也可能会遇到我遇到的相同错误。

我的问题是 iptables 开箱即用配置错误。我在查看了以下内容后意识到了这个问题答案指出,docker 实际上是一台新机器,就网络而言。因此,在从iptables -F主机箱中清除 iptables 后,问题就消失了。

相关内容