Docker服务在EC2实例本地可访问,远程无法连接如何解决?
检查WebAPI的绑定地址:确保你的.NET WebAPI服务监听的是
0.0.0.0而非仅127.0.0.1。在Program.cs中可以通过以下方式设置:builder.WebHost.UseUrls("http://0.0.0.0:80");或者在launchSettings.json的
applicationUrl字段配置为http://0.0.0.0:80。服务仅绑定127.0.0.1时,只能通过本地回环访问,无法响应公网网卡的请求。验证EC2子网的网络ACL规则:网络ACL是子网级别的防火墙,即使安全组允许流量,网络ACL也可能拦截。确认入站规则允许80(HTTP)和443(HTTPS)端口的流量,同时出站规则允许返回的响应流量(通常是1024-65535端口范围)。
检查EC2实例的系统防火墙:Linux实例可能启用了iptables或ufw,Windows实例可能有本地防火墙。运行以下命令验证:
- Linux(iptables):
sudo iptables -L INPUT | grep -E '80|443',确保存在允许对应端口的规则。 - Linux(ufw):
sudo ufw status,确认已开放80/443端口。 - Windows:在Windows Defender防火墙中检查是否允许WebAPI服务的入站连接。
- Linux(iptables):
确认WebAPI的监听端口与访问端口一致:你本地wget使用的是80端口,公网访问时需确保使用相同端口,且该端口在安全组、网络ACL、系统防火墙中均已开放。如果WebAPI实际监听其他端口,需同步调整所有相关配置。
验证EC2公网端点的正确性:确认你使用的公网IP是当前EC2实例的有效公网IP(临时公网IP在实例停止重启后会变更,建议使用弹性IP固定)。在EC2控制台的实例详情中核对公网IP地址。
在EC2本地测试公网IP访问:在EC2实例内部执行
wget http://<你的公网IP>,如果无法访问,说明服务未绑定到公网网卡或本地防火墙拦截;如果能访问,再排查外部网络的路由问题(这种情况概率较低)。
内容的提问来源于stack exchange,提问作者Duncan Palmer

