Tag: sigkill

运行SpringBootApplication PostConstruct和PreDestroy

我在运行docker容器中的spring应用程序时遇到了麻烦(spring和docker在我的环境中都有最新版本)。 我想为应用程序类创build一个健康的生命周期AnalysisServiceBootstrap:使用方法start()运行初始化代码在创buildAnalysisServiceBootstrap之后运行方法stop()right在销毁AnalysisServiceBootstrap之前(我想运行stop()停止应用程序)。 我有以下代码: package com.pack; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.web.SpringBootServletInitializer; @SpringBootApplication public class AnalysisServiceBootstrap { // called OK on docker "start <containerId>" @PostConstruct public void start() throws Exception { // some init code } // NOT called on "docker stop <containerId>" @PreDestroy public void stop() { // some […]

为什么我不能在Docker中运行PID 1时CTRL-C睡眠无限

案例:我们有一个Docker容器,它运行一个需要永远“阻塞”的bash脚本(因为它暴露了另一个容器的容量,但是为什么我们有时需要这个容器)。 我认为这可以工作,然后: exec sleep infinity; ps aux然后给出“睡眠”作为PID 1.很好,我想,那么它会收到我们从容器外部发送的信号。 例如: docker kill -s INT container_name 但是这不起作用,容器继续运行(也为SIGTERM)。 一个正常的杀死工作,但我不明白为什么有一个区别(这让我非常恼火): docker kill container_name 为什么我不能用SIGINT / SIGTERM在我的容器中作为PID 1运行时终止“睡眠”? 我相信我可以使用SIGINT / SIGTERM杀死其他东西(如bash脚本),当它们在容器中作为PID 1运行时。