Как печатать на терминал из службы (реагируя на SIGINT/SIGTERM), когда CTRL + C-ing докер компонует?

У меня есть служба (в этом примере Python), которая печатает что-то на SIGINT/SIGTERM.

printer.py:

import signal
import sys
import threading

def runner(stop_event):
    while not stop_event.wait(1):
        print('Hi.', flush=True)

stop_event = threading.Event()

def signal_handler(*_):
    stop_event.set()
    print('Bye.', flush=True)
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)

runner_thread = threading.Thread(target=runner, args=(stop_event,))
runner_thread.start()
runner_thread.join()

При нормальной работе в терминале и нажатии CTRL+C все работает нормально, т.е. печатается сообщение Bye.:

$ python3 printer.py 
Hi.
Hi.
^CBye.

Однако при работе с компоновкой Docker и CTRL+C, Bye. никогда не отображается.

Dockerfile:

FROM python:3.7
ADD printer.py .
CMD [ "python", "printer.py" ]

docker-compose.yml:

version: '2.4'

services:
  printer:
    build:
      context: .
      dockerfile: Dockerfile

Терминальное взаимодействие:

$ docker-compose up
Creating network "compose_print_term_default" with the default driver
Creating compose_print_term_printer_1 ... done
Attaching to compose_print_term_printer_1
printer_1  | Hi.
printer_1  | Hi.
^CGracefully stopping... (press Ctrl+C again to force)
Stopping compose_print_term_printer_1 ... done

Что можно сделать, чтобы Bye. стало видимым?


person Tobias Hermann    schedule 25.04.2019    source источник
comment
Взгляните на этот вопрос: stackoverflow.com/questions/41451159/   -  person Wie    schedule 25.04.2019
comment
@Ви Спасибо. Но печать Bye. — это просто пример. На самом деле сервис подсчитывает некоторую статистику своей работы и выводит из нее сводку. Таким образом, это нельзя просто сделать в сценарии оболочки оболочки, как объяснено в ответе на вопрос, на который вы ссылаетесь.   -  person Tobias Hermann    schedule 25.04.2019


Ответы (1)


Кажется, это проблема с docker compose, известная уже несколько лет: https://github.com/docker/compose/issues/592

person Tobias Hermann    schedule 26.04.2019