У меня есть контейнеризированная архитектура, где каждая служба работает в другом контейнере, и у меня есть файл Docker Compose для этого. Я хочу отладить одну из этих служб под названием api
. Код написан на Python. Я знаю, как подключиться к этому контейнеру, но сталкиваюсь с проблемой при отладке.
Ранее я использовал PyCharm Pro, который имел опцию отладки в Docker Compose, есть ли у VS Code аналогичная функциональность?
Это запущенные службы, для которых я хочу отладить api
Когда я выполняю docker compose down
build
up
, создается целая копия кода и запускается.
Существовали некоторые решения, объясняющие, как я могу добавить debugpy
в мой файл, но это не работает для меня, и контейнер API отключается, выдав ошибку:
Debugger warning: It seems that frozen modules are being used, which may
2024-09-16T10:32:29.839664068Z 0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off
2024-09-16T10:32:29.839666963Z 0.00s - to python to disable frozen modules.
Я не хочу нарушать работу модулей и хочу отладить свою работающую службу с минимальными изменениями, потому что это производственный код. Мне нужен аналог VS Code для отладки в Docker Compose, а затем выбора службы в PyCharm Professional.
Ответ
Чтобы отладить работающий контейнерный сервис в Visual Studio Code (VS Code), следуйте указаниям ниже. Предполагается, что у вас уже есть контейнеризированная архитектура с файлом Docker Compose для ваших контейнеров, и один из сервисов называется api
. Для отладки Python-кода в контейнере, вам понадобится сделать некоторые настройки.
1. Установка необходимых расширений в VS Code
Убедитесь, что у вас установлены следующие расширения в VS Code:
- Python – для работы с Python-кодом.
- Docker – для работы с контейнерами Docker.
2. Добавление debugpy в ваш код
Чтобы использовать отладчик в Python, вам нужно добавить библиотеку debugpy
в ваш проект. Это можно сделать следующим образом:
-
Если
debugpy
уже не установлен в вашем контейнере, добавьте его в ваши зависимости. Например, добавьте строку в вашrequirements.txt
:debugpy
-
В вашей точке входа приложения (например,
app.py
) добавьте следующий код для активации отладчика:import debugpy # Установите хост и порт для отладчика (по умолчанию 5678) debugpy.listen(('0.0.0.0', 5678)) print("Ожидание подключения отладчика...") debugpy.wait_for_client() # Опционально, ждёт, пока отладчик подключится
3. Настройка вашего Docker Compose файла
Убедитесь, что ваш docker-compose.yml
файл настроен правильно для отладки. Откройте его и убедитесь, что используется правильная версия Python и что порты правильно проксируются:
services:
api:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000" # Обычно порт вашего приложения
- "5678:5678" # Порт для отладчика
volumes:
- .:/app # Монтирование локального кода для отладки
4. Запуск контейнера с отладкой
Запустите ваши контейнеры с помощью команды Docker Compose:
docker-compose up --build
5. Настройка конфигурации отладки в VS Code
- Откройте окно "Run and Debug" в VS Code (иконка с треугольником и лампочкой).
- Нажмите на ссылку "create a launch.json file" и выберите "Python".
- Настройте
launch.json
, добавив следующую конфигурацию:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Remote Attach",
"type": "python",
"request": "attach",
"port": 5678,
"host": "localhost",
"pathMappings": {
"/app": "${workspaceFolder}" // Направляет путь в контейнере на ваш локальный путь
}
}
]
}
6. Подключение отладчика
Когда ваш API-запуск находится в ожидании подключения отладчика (вы должны увидеть сообщения в терминале), вернитесь в VS Code и выберите конфигурацию "Python: Remote Attach". Нажмите "Start Debugging" (или F5).
Теперь вы должны быть в состоянии ставить точки останова и отслеживать выполнение вашего кода.
Решение проблемы с "frozen modules"
Ошибка, о которой вы упомянули, связано с использованием замороженных модулей в вашем Python-коде. Если вы не хотите изменять ваши модули или устанавливать какие-либо дополнительные параметры при запуске, вам следует оставить эту настройку по умолчанию. Убедитесь, что вы правильно добавили debugpy
, и попробуйте отлаживать, как указано выше.
В случае возникновения дополнительных проблем, стоит проверить логи и убедиться, что все зависимости установлены корректно.
В результате, следуя этим шагам, вы сможете отладить свой сервис в работе, используя VS Code, без необходимости вносить значительные изменения в свой код.