docker ps清楚显示0.0.0.0:8080->80/tcp`,服务器本机打开localhost:8080正常,同一局域网的电脑却超时。把端口改了几次也没变化。端口号不一定错,应该从服务实际监听位置开始查。
端口发布只完成了Docker这一段。容器内程序若只监听127.0.0.1、宿主机绑定了回环地址、防火墙拦截,或公网入口未放行,外部仍然无法访问。

进入容器查看服务监听。程序只绑定127.0.0.1时,只接受容器自己的回环请求;Docker把流量送进容器后,服务仍不会接收。Web框架的开发服务器经常默认只监听localhost,需要改为0.0.0.0或容器实际网卡地址。
进入容器检查:
-
docker exec进入容器 -
ss -lntp查看内部端口 -
curl 127.0.0.1:容器端口 -
curl 容器IP:容器端口
回环地址能开、容器IP打不开,修改应用监听;两者都打不开,先查应用启动、配置和日志。

-p 127.0.0.1:8080:80只允许宿主机访问,局域网不会通。-p 8080:80通常发布到所有地址。还要确认宿主机没有其他程序占用端口,并查看Docker实际创建的监听或转发规则。
在宿主机运行:
-
docker ps查看PORTS -
docker inspect查看PortBindings -
ss -lntp检查宿主机端口 -
curl 宿主机局域网IP:端口
localhost正常、宿主机局域网IP失败时,重点看绑定地址和系统防火墙;宿主机IP正常,问题再往客户端与网络入口移动。

UFW、firewalld、nftables和云厂商安全软件都可能影响访问。Docker通常会管理自己的NAT与转发规则,手工规则、默认转发策略或安全加固脚本可能改变行为。不要为了测试长期关闭防火墙,应添加限来源、限端口的临时规则。
检查当前规则:
-
查看firewalld或UFW状态 -
查看nftables/iptables相关规则 -
临时只允许一台测试电脑 -
测试后删除临时放行
局域网放行后恢复,保留最小来源范围;防火墙无命中记录时,继续检查子网隔离、路由或客户端安全软件。

云服务器需要安全组和公网防火墙;家庭网络需要公网地址、端口映射和上级光猫配合。CGNAT环境下,家中路由器的端口映射无法让互联网直接进入。反向代理还可能只监听80/443,目标容器端口或Host配置错误。
公网访问前确认:
-
服务器是否真的有公网地址 -
云安全组是否放行 -
家庭网络是否经过CGNAT -
反向代理能否访问容器端口
用手机流量测试公网,避免同一局域网的NAT回环影响判断。端口通但返回400、404或502,已经进入应用或代理层,不再是端口映射问题。

分别测试容器回环地址、容器IP、宿主机局域网IP和公网域名。每个地址对应不同组件,结果能直接说明应该改应用、Docker、宿主机还是公网入口。保存compose文件和防火墙原规则,修改失败时可快速恢复。
建议的测试顺序:
-
容器内localhost -
容器IP -
宿主机LAN IP -
公网域名或公网IP
前一个地址通、后一个地址不通,问题就在两者之间。这样比同时改容器、Nginx和防火墙更容易找到原因。
Docker显示端口发布,不代表容器内应用监听正确,也不代表宿主机、防火墙和公网入口已经放行。
全关防火墙会扩大暴露范围,也无法确认究竟是哪条规则生效。更合适的测试是只允许一台客户端访问一个端口,完成后删除临时规则。
部分家用路由器不支持NAT回环,同网设备访问公网地址会失败。公网测试应使用手机流量,并与宿主机LAN地址的结果对照。
这些HTTP状态通常说明请求已经到达Web服务或反向代理。此时应检查Host、上游地址和应用路由,而不是继续调整公网端口。
localhost可能命中回环监听、浏览器代理或本机Hosts。至少再测试宿主机局域网IP,才能确认服务是否真的接受来自外部网卡的连接。
容器回环、容器IP、宿主机LAN地址和公网入口分别对应四段路径。前一个能开、后一个失败,两者之间就是下一处检查位置。




