我有一个使用弹簧执行器的spring boot应用程序,它的路径为:localhost:8080 / my-app / health,如果可以,它会返回:
{
"status":"UP"
}
当没有时:
{
"status":"DOWN"
}
我希望ECS在状态关闭几次后重新启动容器。我在容器定义中添加了jq,还在任务定义中添加了运行状况检查,如下所示:
...
"healthCheck": {
"retries": 10,
"command": [
"CMD-SHELL",
"[[ $(curl -s 'http://localhost:8080/my-app/health' | jq -r '.status') == \"UP\" ]] && exit 0 || exit 1 "
],
"timeout": 5,
"interval": 60,
"startPeriod": 300
}
...
但是ECS会不断重新启动我的服务。谁能帮我说如何创建这种健康检查?
答案 0 :(得分:1)
无需解析JSON。只需检查HTTP状态代码即可。
[ "CMD-SHELL", "curl -f http://localhost:8080/my-app/health || exit 1" ]
如果状态码为2xx,则表明容器已准备就绪且状态良好。
答案 1 :(得分:0)
问题是CMD-SHELL使用不支持[[...]]
语法的sh运行脚本。
检查容器运行状况检查日志对我有很大帮助:
docker inspect --format "{{json .State.Health }}" <container name> | jq