У меня есть контейнер docker, который запускает программу go по следующим строкам
package main
import (
"fmt"
"time"
)
func main() {
for {
time.Sleep(2 * time.Second)
fmt.Printf("woke up!\n")
}
}
Документация docker гласит, что когда мы делаем docker stop <container id>
docker позволит контейнеру аккуратно завершить работу в течение 10 секунд, а затем попытаться силой убить его, отправив другой сигнал. Поскольку мой код имеет бесконечное значение l oop, мне не ясно, когда я запускаю эту программу в своем собственном образе docker, как и почему мой контейнер мгновенно закрывается.
Кроме того, как только я знаю, почему он выключается, как я могу настроить свою программу go, чтобы она не выключалась, и позволить docker принудительно завершить работу.
Я основываюсь на своем понимании docker stop
из docker документации
И в ней есть текст, который гласит: The main process inside the container will receive SIGTERM, and after a grace period, SIGKILL.
Если быть точным, есть ли способ, которым я могу
Настройте мой код, где SIGTERM игнорируется, и docker демон должен в конечном итоге выполнить SIGKILL для контейнера
Настройте мой код, где я могу заставить SIGKILL также не вызывать останов контейнера (я понимаю, что в linux процесс не может перехватить или игнорировать SIGKILL). Но можно ли игнорировать SIGKILL, чтобы мой код обманул демона docker и контейнер не закрылся?