Python Docker Удаленная отладка кода VS - PullRequest
0 голосов
/ 10 июня 2018

пытаюсь получить удаленную отладку для моего API Python flask.Я могу составить docker и заставить почтальона успешно вызывать работающий контейнер, но когда я пытаюсь подключить отладчик, он никогда не компилируется.Ниже приведены настройки запуска yml, dockerfile и vscode ... я получаю следующую ошибку:

Произошла ошибка при запуске сервера отладки.Ошибка = {"code": "ECONNREFUSED", "errno": "ECONNREFUSED", "syscall": "connect", "address": "127.0.0.1", "port": 5050}

version: '2'

services:
  website:
    build: .
    command: >
      python ./nomz/app.py
    environment:
      PYTHONUNBUFFERED: 'true'
    volumes:
      - '.:/nomz'
    ports:
      - '5000:5000'
      - '5050'

DockerFile

FROM python:3.6-slim

ENV INSTALL_PATH /nomz
RUN mkdir -p $INSTALL_PATH

WORKDIR $INSTALL_PATH

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .

EXPOSE 5000 5050

Настройки запуска VSCode

{
  "name": "Python: Attach",
  "type": "python",
  "request": "attach",
  "localRoot": "${workspaceFolder}/nomz/app.py",
  "remoteRoot": "/nomz/",
  "port": 5050,
  "host": "localhost"
}

1 Ответ

0 голосов
/ 12 июня 2018

Я наконец-то начал работать с удаленной отладкой.Мне пришлось pip3 установить ptvsd == 3.0.0 на моем локальном компьютере и убедиться, что для файла require.txt для моего контейнера Docker установлена ​​та же версия.(примечание: последняя версия 3.2.1 не работала)

@ BrettCannon имел правильную ссылку для хорошего урока https://code.visualstudio.com/docs/python/debugging#_remote-debugging

Мне нужно было добавить код вapp.py из колбы приложение.Первоначально я получал адрес, который уже использовался, при запуске контейнера, поэтому я добавил код сокета, и после первого успешного присоединения отладчика он мне больше не нужен (странно, я знаю, но именно поэтому я оставил его весли кто-то другой получит эту ошибку)

try:
    import ptvsd
    # import socket
    # sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # sock.close()
    ptvsd.enable_attach(secret=None,address=('0.0.0.0',5050))
    ptvsd.wait_for_attach()
except Exception as ex:
    print('Not working: ')

также я снял отладочный kwarg из app.run () в app.py для приложения фляги.Все это дало мне возможность подключить отладчик, но точки останова, где «Неподтвержденные», поэтому последним, что должно было случиться, был путь к app.py в файле launch.json для remoteRoot.Я скажу, что я создал небольшой тестовый API, чтобы это работало, и для этого нужен только первый уровень пути (т. Е. / App, а не /app/app/app.py)) Вот github тестового API, который я сделал (https://github.com/tomParty/docker_python). Так что, если отладчик подключается, но ваши точки останова не проверены, поиграйтесь с путем remoteRoot

"remoteRoot": "/nomz/nomz/app.py"
...