我有一个使用弹簧执行器的弹簧启动应用,并且在以下路径下: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不断重启我的服务。谁能帮助我,说如何创建这种健康检查?
无需解析JSON。只需检查HTTP状态代码即可。
[ "CMD-SHELL", "curl -f http://localhost:8080/my-app/health || exit 1" ]
如果状态码为2xx,则表明容器已准备就绪且状态良好。
问题是CMD-SHELL使用不支持[[...]]
语法的sh运行脚本。检查容器运行状况检查日志对我有很大帮助:
docker inspect --format "{{json .State.Health }}" <container name> | jq