AWS App Runner部署报错Create Failed:健康检查失败问题问询
AWS App Runner Nginx 镜像健康检查失败排查方案
1 优先核对容器内部监听端口与App Runner配置的匹配性
这是此类问题最高发的诱因:你本地运行时使用的-p 8080:xx端口映射规则,是将宿主机8080端口转发到容器内部的服务端口,不代表容器内Nginx实际监听的是8080。
- 执行以下命令验证容器内部端口是否可通:
如果返回连接拒绝,说明镜像内Nginx实际监听的不是8080端口,默认官方Nginx镜像监听端口为80。# 启动容器不做端口映射 docker run -d --name nginx-test <你的镜像名> # 进入容器内部探测8080端口 docker exec nginx-test curl http://localhost:8080/ - 修正方案:将App Runner的服务端口、健康检查端口都改为容器内Nginx实际监听的端口即可,不需要和你本地映射的宿主机端口保持一致。
2 调整健康检查参数适配服务启动特性
- 确认健康检查协议选择为
HTTP,不要错选TCP、HTTPS协议(未配置SSL的Nginx不支持HTTPS探测)。 - 如果你的镜像有自定义启动脚本,Nginx不会在容器启动后立刻就绪,可适当调大健康检查参数:
- 初始延迟:建议设置为5~15秒,避免服务未启动就开始探测
- 检查间隔:调整为5秒
- 健康阈值:设置为2~3次,允许偶发探测失败
3 验证健康检查路径返回状态码
App Runner HTTP健康检查要求返回200~399区间的状态码才判定为成功:
- 本地执行命令验证根路径返回码:
如果返回301/302重定向、403/404等错误码,要么修改Nginx配置让根路径返回200状态码,要么将健康检查路径改为可正常返回200的路径。docker exec nginx-test curl -I http://localhost:<容器内实际端口>/
4 排查权限与网络限制
- 如果你使用非root用户运行容器,不要配置Nginx监听1024以下的端口(非root用户默认无权限监听低端口),建议改为8080、8000等高端口,同时同步App Runner的端口配置。
- 如果你的App Runner服务接入了自定义VPC,确认VPC安全组没有拦截健康检查流量对服务端口的访问。
内容的提问来源于stack exchange,提问作者Spencer Goff
相关产品推荐
相关产品推荐

