Skip to content

Instantly share code, notes, and snippets.

@kakty3
Last active July 8, 2023 20:37
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save kakty3/fcd47c620cdc399e18a1aac62e16a59a to your computer and use it in GitHub Desktop.
Save kakty3/fcd47c620cdc399e18a1aac62e16a59a to your computer and use it in GitHub Desktop.
Настройка дебага контейнеризированного приложения в InelliJ Idea

Добавляем конфигурацию запуска

Переходим 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

В 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

Программа, запущенная в контейнере должна подключиться к дебаг серверу.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment