Docker容器停止时停止AWS ECS Fargate任务

tmb3ates  于 2023-06-05  发布在  Docker
关注(0)|答案(3)|浏览(320)

有没有一种方法可以让AWS ECS Fargate任务在Docker容器停止时自动停止?

bis0qfac

bis0qfac1#

启动任务,而不是服务。服务用于需要始终保持运行的长时间运行的流程。您的用例需要一个任务,该任务完成后将退出容器。让你的Dockerfile使用CMD选项。示例:

FROM node:6
WORKDIR /usr/local/src/app
COPY . .

# ...

CMD [ "node", "script-name.js" ]

请确保您的脚本正确退出,并且在此期间没有其他进程启动,即使在cmd脚本终止后也没有运行,这可能会导致您的容器保持活动状态更长时间。

ma8fv8wu

ma8fv8wu2#

Docker容器应该有一个CMD脚本。当CMD脚本终止时,docker容器将停止,因此,ECS任务也应该停止。请注意,如果您将其作为某种服务启动,ECS将启动一个替换任务(例如,在发生故障或错误时保持Web服务器正常运行)
如果你的ECS任务在你的容器“停止”时没有停止,那么我猜你的命令指向的是一个永远不会停止的东西(比如BASH shell),你正在以其他方式启动你的主任务。如果你的容器是以规范的方式构建的,这应该是“工作”的。

vuv7lop3

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"]

相关问题