Переходим Run → Edit configurations → Add → Python Remote Debug
Указываем номер порта, например 11122
.
Выключаем галку Suspend after connect
.
В Path mappings
нажимаем справа кнопку …
и указываем Local path
- путь до папки с проектом на локальной машине, Remote path
- путь до папки с проектом в контейнере, например: /opt/local/path/to/project=/opt/remote/path/to/project
.
Нажимаем OK
.
Копируем архив pycharm-debug.egg
в папку с проектом (для макосовской IntelliJ Idea
его можно найти в ~/Library/Application\ Support/IntelliJIdea2016.2/python/pycharm-debug.egg
).
Чтобы можно было импортировать pydevd
, нужно добавить его в PYTHONPATH
:
import sys
sys.path.append('/opt/remote/path/to/project/pycharm-debug.egg')
Теперь в месте кода, в котором хотим остановиться дебагером, добавляем:
import pydevd
pydevd.settrace('dockerhost', port=11122, stdoutToServer=True, stderrToServer=True)
Дальше можно пользоваться стандартными брейкпойнтами.
Обратите внимание – порт должен быть то же самый, что и в Python Remote Debug
конфигурации.
В docker-compose
добавляем
volumes:
- /opt/local/path/to/project:/opt/remote/path/to/project
extra_hosts:
- "dockerhost:$DOCKERHOST"
Запускаем созданную Python Remote Debug
конфигурацию. В консоли вы должны увидеть:
Starting debug server at port 11122
Теперь дебаг сервер запущен и ждет подключений клиентов.
В терминале выполняем
set -x DOCKERHOST (ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1)
И запускаем контейнер или докер-компоуз
docker-compose up
Программа, запущенная в контейнере должна подключиться к дебаг серверу.