2015-07-21 116 views
8

Mam cronjob uruchomiony wewnątrz kontenera dokera, który sprawdza, czy wszystkie usługi działają zgodnie z oczekiwaniami. Jeśli to zadanie crona stwierdzi, że istnieje problem chciałbym zatrzymać pojemnik Döcker (od wewnątrz ...)Zatrzymywanie kontenera dokera od wewnątrz

Niestety exit prostu zatrzymuje mój skrypt zadanie crona

+1

'shutdown -h now'? – zero323

+0

na jakim obrazie jest Twój pojemnik? – Thomasleveil

+0

pochodzi z ubuntu: 12.04 –

Odpowiedz

2

Zasadniczo trzeba PID 1 do wyjść, aby zatrzymać pojemnik.

Początkowo sądziłem, że kill -s SIGKILL 1 zadziała, ale PID 1 jest chroniony, a więc nie.

Zgodnie z sugestią @Thomasleveil, można dodać kod taki jak trap "exit" SIGINT SIGTERM do skryptu PID 1, co będzie oznaczać, że proces zakończy się po wysłaniu kill -s SIGINT 1. Nieco wolę tę metodę od tej, którą wymyśliłeś (zabijając proces potomny bezpośrednio), ponieważ daje ona procesowi macierzystemu szansę na oczyszczenie, a także proces nadrzędny powinien być w stanie znaleźć PID procesu potomnego bez awk.

Jeśli jednak używasz wielu procesów, powinieneś rozważyć użycie czegoś takiego jak supervisord lub runit.

+0

Myślałem o tym również, ale nie mogłem go uruchomić. Czy masz plik Docker na prezentację? – Thomasleveil

+0

Err, nieprawdaż? Czy jest komunikat o błędzie? Jaki użytkownik wykonuje zadanie cron? –

+0

Próbowałem za pomocą skryptu powłoki, którego treść to 'kill -s SIGKILL 1' + nieskończona pętla/sleep i spraw, aby doker uruchamiał ten skrypt powłoki na starcie (jako root). Więc nie mam crona, tylko prosty skrypt działa; może proces nie może się zabić? Również 'man 2 kill' wydaje się wskazywać, że polecenie kill odmawia wysłania sygnałów do procesu, jeśli proces ten nie definiuje jawnie programu obsługi dla tego konkretnego sygnału. – Thomasleveil

1

Próbowałem zabić proces 1 bez powodzenia.

Podkreśl komentarz @ zero323 z shutdown -h now. Działa dobrze (przepraszam, nie mogę głosować na nią bezpośrednio, ponieważ nie ma jej na liście odpowiedzi).

+0

Oto, co dzieje się w najnowszym obrazie ubuntu: > root @ b968bf313300:/# shutdown -h now Nie można połączyć się z magistralą: brak takiego pliku lub katalogu Nie powiodło się rozmawiać z demonem init. I nic nie robi. –

Powiązane problemy