ECS部署Docker后EC2 Public IPv4 DNS无法连接问题求助
ECS部署后无法通过EC2公网DNS访问服务的排查建议
问题背景
我已将Dockerfile(如下所示)推送到容器注册表(ECR),并通过任务将其部署到同时使用EC2和Fargate的ECS集群中。
FROM python:3.10 # Copy local code to the container image. ENV APP_HOME /app ENV PYTHONUNBUFFERED True WORKDIR $APP_HOME COPY requirements.txt /app/ RUN pip install -r requirements.txt RUN pip install --no-cache-dir gunicorn # Install Python dependencies and Gunicorn RUN groupadd -r app && useradd -r -g app app # Copy the rest of the codebase into the image COPY --chown=app:app . ./ USER app # Run the web service on container startup. Here we use the gunicorn # webserver, with one worker process and 8 threads. # For environments with multiple CPU cores, increase the number of workers # to be equal to the cores available in Cloud Run. CMD exec gunicorn --bind :5000 --log-level info --workers 1 --threads 8 --timeout 0 index:server
我已更新安全组的入站规则,使其完全开放所有公网流量:
然而,尽管EC2实例正在运行且容器已部署,点击公网DNS后仍无法加载页面。错误信息如下:
Unable to connect
连接ec2-18-222-141-140.us-east-2.compute.amazonaws.com时发生错误。
该站点可能暂时不可用或过于繁忙,请稍后重试。 如果您无法加载任何页面,请检查您的计算机网络连接。 如果您的计算机或网络受防火墙或代理保护,请确保Firefox被允许访问网络。
此前我在Cloud Run上完成过类似操作且无问题,此次尝试AWS是希望提升速度。我已修改安全组入出站规则,检查了网关和VPC,均按照AWS文档建议操作,但问题仍未解决,请问可能的原因是什么?
可能的原因及排查步骤
- ECS任务端口映射未配置:检查ECS任务定义的端口映射,确认容器的5000端口已映射到EC2实例的主机端口(如5000)。无端口映射时,外部流量无法穿透到容器内部。
- 网络ACL规则限制:VPC的网络ACL可能存在入站/出站拦截。确认网络ACL允许目标端口(如5000)的入站流量,同时放行容器必要的出站流量(如DNS解析、响应包返回)。
- 容器运行状态异常:登录EC2实例,用
docker ps确认容器是否正常运行;通过docker exec <容器ID> netstat -tulpn检查gunicorn是否监听0.0.0.0:5000;查看容器日志docker logs <容器ID>,排查启动阶段是否有报错。 - EC2公网访问配置缺失:确认EC2实例已分配公网IP,VPC已关联Internet Gateway,且路由表中存在指向Internet Gateway的0.0.0.0/0路由规则。
- 负载均衡配置问题:若ECS服务绑定了负载均衡,检查目标组是否正确关联ECS任务,负载均衡安全组是否允许公网访问监听端口。可直接访问EC2公网IP+映射端口(如
http://18.222.141.140:5000),排除DNS解析问题。 - 本地网络干扰:本地防火墙、代理可能阻止了对目标端口的访问。尝试切换网络(如手机热点)测试,排除本地环境问题。
内容的提问来源于stack exchange,提问作者smofid
相关产品推荐
相关产品推荐

