2016-11-28 22 views
2

Так что я использую пакет python для микросервиса nameko, который запускает службу с использованием eventlet и звонит eventlet.monkey_patch() при импорте.eventlet.monkey_patch() прерывает ipdb в контейнере докера

Я расшифровал, что именно эта часть кода блокирует любые попытки отладки через ipdb. Консоль ipdb отображается в терминале, но я ничего не могу напечатать и должен закрыть весь сеанс терминала, чтобы выйти из процесса.

прилипшей консоль выглядит следующим образом: enter image description here

Как я могу использовать ipdb с этой функцией?

EDIT: Этот вопрос только, похоже, происходит в контейнере докера.

+0

Вы снабжающих опции '' docker run'', чтобы он подключил вашу консоль и '' stdin'' к контейнеру, чтобы вы могли ввести его? Если бы это был простой '' docker run'', вы бы поставили опцию '' -it''. –

+0

По-видимому, псевдо-tty определяется командой docker-compose. Интерактивная часть, которая, как мне кажется, также дефолтна (или подразумевается «--service-ports»), тем более, что без 'eventlet.monkey_patch()' я могу использовать ipdb в интерактивном режиме из контейнера докера. – steve

+0

Eventlet также разбивает ipython, поэтому я подозреваю, что он имеет какое-то отношение к интерактивности, а не работает на докере или использует ipdb. –

ответ

2

Извините, нет удобного решения, на данный момент лучшим вариантом является пропустить docker при использовании ipdb (вы можете извлечь изображение файловой системы из докеров и запустить его в другой виртуализации, такой как qemu, Virtualbox, systemd-nspawn). См. https://github.com/larsks/undocker.

Другие вещи, чтобы попробовать (не может работать, пожалуйста, поделиться результатами):

  • обновление eventlet к мастеру GitHub pip install https://github.com/eventlet/eventlet/archive/master.zip

Этот вопрос крест разместил здесь https://github.com/eventlet/eventlet/issues/361

+0

Спасибо за ответ. По какой-то причине «ipdb» несовместим с «eventlet» в контейнере докеров. Моим решением оказалось использование pdbpp, который отлично работает с nameko и eventlet. Установка os = False, к сожалению, не исправляла, но я никогда не пытался обновлять eventlet, хотя я использовал последнее имя, поэтому я бы предположил, что флажок eventency будет обновлен. – steve

+0

'pip freeze' сообщает версии установленных пакетов. – temoto

 Смежные вопросы

  • Нет связанных вопросов^_^