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

无法访问部署在Elastic Beanstalk上的Docker Tomcat应用

Elastic Beanstalk部署Tomcat容器访问超时问题排查方案

问题背景

本地Red Hat Enterprise Docker容器中部署的Tomcat自定义应用可通过http://localhost:8080/ephemeral.server/login.jsp?goto=/ephemeral.server/html/next/index.jsp正常访问,但部署到Elastic Beanstalk后,使用环境公网域名访问时,80、8080端口均提示连接超时/拒绝,已为EC2实例安全组开放8080入站规则,需进一步排查。

排查步骤

1. 验证容器运行与端口监听状态

  • 登录EC2实例,执行docker ps确认容器是否处于运行状态
  • 进入容器:docker exec -it <容器ID> /bin/bash,安装net-tools(若未安装:dnf install net-tools -y)后执行netstat -tulpn | grep 8080,确认Tomcat监听的是0.0.0.0:8080(而非仅127.0.0.1,否则外部无法访问)
  • 查看Tomcat启动日志:cat /opt/tomcat/logs/catalina.out,排查是否有数据库连接失败、权限不足、依赖缺失等启动报错

2. 检查负载均衡与目标组配置(负载均衡型环境)

  • 进入Elastic Beanstalk控制台,查看负载均衡器监听规则:确认80端口是否转发到EC2实例的8080端口
  • 检查目标组状态:确认EC2实例在目标组中处于健康状态,不健康实例会被负载均衡停止流量转发
  • 若为单实例环境,直接访问EC2公网IP:8080测试,排除域名解析或负载均衡层面问题

3. 验证EC2实例网络可达性

  • 本地ping EC2公网IP,确认基础网络连通性(ping不通需排查子网路由、NACL配置)
  • 在EC2实例内部执行curl localhost:8080/ephemeral.server/login.jsp,确认应用在实例本地可访问
  • 检查子网的网络ACL(NACL):确保入站规则允许80、8080端口流量,出站规则允许响应流量(NACL为无状态,需双向放行)

4. 确认Docker端口映射配置

  • 在EC2实例执行docker inspect <容器ID>,查看HostConfig.PortBindings字段,确认容器8080端口是否正确映射到主机8080端口
  • 若映射错误,需调整Dockerrun.aws.json后重新部署

5. 排查Tomcat核心配置

  • 检查容器内/opt/tomcat/conf/server.xml的Connector配置,确保address属性为0.0.0.0,示例:
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               address="0.0.0.0"/>
    
  • 查看/opt/tomcat/webapps目录,确认ephemeral.server应用已正确部署

6. 验证环境变量与数据库连接

  • 确认RDS数据库连接信息(端点、端口、用户名密码)正确,Tomcat启动时数据库连接失败会导致服务无法初始化
  • 在容器内执行printenv,确认JAVA_HOME、CATALINA_HOME等关键环境变量配置无误

7. 查看Elastic Beanstalk系统日志

  • 执行eb logs或从EB控制台下载环境日志,重点排查:
    • /var/log/eb-engine.log:环境部署过程中的引擎日志,确认部署流程无异常
    • /var/log/docker.log:容器启动相关日志,排查容器启动失败原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:00:16