Tag: sigint

无法在Docker容器中捕获SIGINT

我有以下图像 FROM golang:1.8.3 WORKDIR /go/src/x/x/program RUN mkdir /logs VOLUME ["/go/src/x/x/program", "/logs"] CMD ["sh", "-c", "go install && program"] 我的Go服务器以下面的方式监听SIGINT // … Other stuff c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) go func() { <-c signal.Stop(c) // Server graceful shutdown err := s.Shutdown(context.Background()) if err != nil { fileLogger.Printf("could not shutdown server: %v", err) } else […]

为什么我不能在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运行时。