我不确定这是否相关,但我正在使用 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 配置。
我被派到这里堆栈溢出。
答案1
按照@Gerald Schneider 的建议回答我的问题,因为这是 Oracle 云计算实例的新安装,所以其他人也可能会遇到我遇到的相同错误。
我的问题是 iptables 开箱即用配置错误。我在查看了以下内容后意识到了这个问题这答案指出,docker 实际上是一台新机器,就网络而言。因此,在从iptables -F
主机箱中清除 iptables 后,问题就消失了。