Я использую Docker (+ Docker Compose).Все docker-compose
взаимодействие происходит через пакет Python ' fabric ' (v1).
Пример:
def runserver():
local('docker-compose up')
и:
$ fab runserver
Все ведет себя нормально, пока я не попытаюсь ^C
из запущенного docker-compose up
:
docker-compose
, кажется, получает сигнал ^C
(SIGINT
?), Когда он начинает останавливать мойконтейнеры - например:
Stopping celery-export ... done
Stopping celery ...
Однако во время процесса остановки контейнера (иногда до 10 секунд, если контейнер не реагирует на сигналы должным образом), я могу нажать клавишу ввода / возврата и посмотреть /взаимодействовать с моей оболочкой (как если бы процесс завершился).
Хотя на этом этапе контейнеры еще не закончили останавливаться (рядом с каждой Stopping ...
строкой нет done
).Как будто мне преждевременно предоставили доступ к моей оболочке, которую я могу свободно использовать.Если контейнер с поздним завершением остановится (обычно через 10 секунд), он нарисует линию done
над тем, что я сейчас делаю в своем терминале.
Пример:
Stopping celery-export ... done
Stopping celery ...
Stopping redis ...
$ uptime
10:54 up 1 day, 17:22, 2 users, load averages: 1.73 1.94 1.92
Stopping celery ... done
Stopping redis ... done
Этого не происходит, когда я вызываю docker-compose up
напрямую (вне структуры), поэтому я подозреваю, что это как-то связано с фабрикой, обертывающей выполнение команды.
Ожидаемое поведение: я не могу получить доступ к своемуоболочка, пока не закончится процесс остановки контейнера.
Простите, что у меня нет правильной терминологии для описания этой проблемы, и если это было бы более уместно в Superuser вместо SO.