我正在尝试在 AWS Elastic Beanstalk 中运行一个旧的 Node.js 项目。它有时会崩溃并且环境健康状况会变为“已降级”,但 EB 不会重新启动容器,而是让它挂起。
查看日志,容器似乎由于某些 socket.io 错误而退出。
这个问题之前有人问过,但是这个答案,这个答案,和这个reddit评论都建议配置负载均衡器。但是,我有一个单实例应用程序,根本没有负载均衡器。
是否可以让EB自动重启单实例应用程序?
ELB(负载均衡器)即使只有一个实例也可以使用,如果你想在未来扩展或考虑其他部署策略,事情可能会更容易。所以使用一个没有技术上的危害(除了它的成本更高,但那是在经济上)。
与其重新启动整个 EB 应用程序,不如将应用程序 Dockerize 化,并在失败时重新启动 Docker 本身。
CMD ["apache2ctl", "-D", "FOREGROUND", "--restart=on-failure"]
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "<your-image-name>"
},
"Ports": [
{
"ContainerPort": "80"
}
],
"RestartPolicy": {
"Name": "on-failure",
"MaximumRetryCount": 5
}
}