AWS ECS是否会重启容器内已退出的Java进程?
问题:Java进程终止后,AWS ECS中的对应容器是否会重启?
我有一个Java应用,通过Docker在AWS上运行,其入口点配置如下:
ENTRYPOINT ["java","-jar", "-Xmx600m", "/app.jar"]该应用部署在AWS ECS中,若Java进程因任意原因终止,对应的容器是否会被重新启动?
回答
容器是否会重启,核心取决于你的ECS部署方式和配置:
1. 以ECS服务(Service)部署
如果Java应用是通过ECS服务运行的,只要服务的期望任务数大于0,容器终止后一定会被重启。ECS服务的核心作用就是维持任务的期望运行数量,不管Java进程是正常退出(退出码0)还是异常崩溃(非0退出码),ECS都会自动启动新容器替换终止的任务,直到任务数量符合期望值。
2. 以独立ECS任务(Task)部署
如果是作为单次执行的独立任务运行,容器是否重启由任务定义中的重启策略决定:
Always:无论Java进程的退出码是什么,都会重启容器。OnFailure:仅当Java进程以非0退出码终止(比如崩溃、未捕获异常导致退出)时才重启;正常退出(退出码0)则不重启,这是独立任务的默认策略。Never:不管进程如何终止,都不会重启容器。
额外说明
你的Docker入口点配置中,Java进程是容器的PID 1进程——一旦该进程终止,整个容器会进入停止状态,ECS会依据上述配置判断是否执行重启操作。
内容的提问来源于stack exchange,提问作者HeronAlgoSearch
相关产品推荐
相关产品推荐

