You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS NLB健康检查失败:Docker端口映射80:3000后目标实例异常

排查AWS NLB目标实例健康检查失败(Docker端口映射场景)

核心排查方向

NLB的TCP健康检查是直接连接EC2实例的主机80端口,而非容器内部端口。Apache正常说明主机80端口能正常响应,但Docker映射80:3000后出现问题,重点排查主机80端口的实际监听与连通性。


具体调试步骤

  • 检查主机80端口监听状态
    登录EC2实例,执行命令查看80端口的监听进程:

    ss -tulpn | grep :80
    

    正常情况下应该看到docker-proxy或相关进程监听0.0.0.0:80或EC2私有IP:80。如果没有任何结果,说明Docker端口映射未生效;如果监听的是127.0.0.1:80,则NLB的外部请求无法访问。

  • 测试主机本地80端口连通性
    在EC2实例内部直接访问80端口:

    curl -v localhost:80
    # 或用telnet测试
    telnet localhost 80
    

    如果连接失败,说明Docker映射的端口实际不通。此时需检查Node.js应用的监听地址:确保应用绑定的是0.0.0.0:3000而非127.0.0.1:3000——后者仅允许容器内部访问,Docker代理无法转发外部请求到容器的3000端口。

  • 验证Docker容器端口配置
    查看容器的端口绑定详情:

    docker inspect <你的容器ID或名称> | grep -A5 -B5 "PortBindings"
    

    确认输出中存在"80/tcp": [{"HostPort": "80"}],同时查看NetworkSettings.Ports.3000/tcp的HostIp是否为0.0.0.0(允许所有IP访问)。

  • 查看NLB健康检查失败详情
    登录AWS控制台,进入目标组页面,查看健康检查的失败原因:

    • 若为Connection refused:主机80端口未正常监听或被阻止
    • 若为Timeout:需检查EC2实例的路由表、NACL(网络访问控制列表)是否允许NLB的健康检查流量(即使安全组全开,NACL可能有默认拒绝规则)
  • 检查主机iptables规则
    Docker会自动添加iptables转发规则,执行以下命令查看是否存在异常:

    iptables -L DOCKER -n
    

    确认存在类似ACCEPT tcp -- 0.0.0.0/0 172.x.x.x tcp dpt:3000的规则(172.x.x.x为容器私有IP),同时检查INPUT链是否允许80端口的入站流量。


内容的提问来源于stack exchange,提问作者cristian sierra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:42:54