无法访问部署在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
相关产品推荐
相关产品推荐

