有没有一种方法可以让AWS ECS Fargate任务在Docker容器停止时自动停止?
bis0qfac1#
启动任务,而不是服务。服务用于需要始终保持运行的长时间运行的流程。您的用例需要一个任务,该任务完成后将退出容器。让你的Dockerfile使用CMD选项。示例:
FROM node:6 WORKDIR /usr/local/src/app COPY . . # ... CMD [ "node", "script-name.js" ]
请确保您的脚本正确退出,并且在此期间没有其他进程启动,即使在cmd脚本终止后也没有运行,这可能会导致您的容器保持活动状态更长时间。
ma8fv8wu2#
Docker容器应该有一个CMD脚本。当CMD脚本终止时,docker容器将停止,因此,ECS任务也应该停止。请注意,如果您将其作为某种服务启动,ECS将启动一个替换任务(例如,在发生故障或错误时保持Web服务器正常运行)如果你的ECS任务在你的容器“停止”时没有停止,那么我猜你的命令指向的是一个永远不会停止的东西(比如BASH shell),你正在以其他方式启动你的主任务。如果你的容器是以规范的方式构建的,这应该是“工作”的。
vuv7lop33#
可以关闭上下文,然后ECS fargate任务将停止。在我的例子中,spring Boot application class实现了CommandLineRunner,。在方法运行时,应该关闭context**((ConfigurableApplicationContext)context).close();**
@SpringBootApplication public class YourApplication implements CommandLineRunner { @Autowired private ApplicationContext context; @Autowired private SynchronizationService synchronizationService; public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } @Override public void run(String... args) { synchronizationService.runSynchronization(); ((ConfigurableApplicationContext) context).close(); } }
我的Dockerfile:
FROM amazoncorretto:11.0.19-al2023 COPY target/*.jar app.jar ENTRYPOINT ["sh", "-c", "java -cp app.jar org.springframework.boot.loader.PropertiesLauncher"]
3条答案
按热度按时间bis0qfac1#
启动任务,而不是服务。服务用于需要始终保持运行的长时间运行的流程。您的用例需要一个任务,该任务完成后将退出容器。让你的Dockerfile使用CMD选项。示例:
请确保您的脚本正确退出,并且在此期间没有其他进程启动,即使在cmd脚本终止后也没有运行,这可能会导致您的容器保持活动状态更长时间。
ma8fv8wu2#
Docker容器应该有一个CMD脚本。当CMD脚本终止时,docker容器将停止,因此,ECS任务也应该停止。请注意,如果您将其作为某种服务启动,ECS将启动一个替换任务(例如,在发生故障或错误时保持Web服务器正常运行)
如果你的ECS任务在你的容器“停止”时没有停止,那么我猜你的命令指向的是一个永远不会停止的东西(比如BASH shell),你正在以其他方式启动你的主任务。如果你的容器是以规范的方式构建的,这应该是“工作”的。
vuv7lop33#
可以关闭上下文,然后ECS fargate任务将停止。在我的例子中,spring Boot application class实现了CommandLineRunner,。在方法运行时,应该关闭context**((ConfigurableApplicationContext)context).close();**
我的Dockerfile: