Я пытаюсь настроить отладчик для dockerized Flask приложения на VSCode. Для этого я подключил ptvsd к своему приложению и открыл его порт.
from flask import Flask, redirect, url_for
app = Flask(__name__)
if app.debug:
print("attaching ptvsd")
import ptvsd
ptvsd.enable_attach(address = ('0.0.0.0', 3000), redirect_output=True)
ptvsd.wait_for_attach()
ptvsd.break_into_debugger()
Dockerfile
FROM python:3
ENV FLASK_APP app/main.py
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "flask", "run", "--host=0.0.0.0" ]
И команда, используемая для запуска контейнера:
docker run -it --rm -p 5000:5000 -p 3000:3000 -e FLASK_ENV=development webserver
Ошибка по умолчанию не отображается после запуска контейнера. Когда я пытаюсь подключить отладчик из vscode на порт 3000, ничего не происходит. Когда я открываю любую страницу своего приложения в веб-браузере, появляется следующее сообщение:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/usr/src/app/app/main.py", line 9, in <module>
ptvsd.enable_attach(address = ('0.0.0.0', 3000), redirect_output=True)
File "/usr/local/lib/python3.7/site-packages/ptvsd/attach_server.py", line 101, in enable_attach
ptvsd_enable_attach(address)
File "/usr/local/lib/python3.7/site-packages/ptvsd/_remote.py", line 64, in enable_attach
**kwargs)
File "/usr/local/lib/python3.7/site-packages/ptvsd/pydevd_hooks.py", line 128, in install
daemon = Daemon(**kwargs)
File "/usr/local/lib/python3.7/site-packages/ptvsd/daemon.py", line 503, in __init__
super(Daemon, self).__init__(wait_for_user, **kwargs)
File "/usr/local/lib/python3.7/site-packages/ptvsd/daemon.py", line 100, in __init__
self._install_exit_handlers()
File "/usr/local/lib/python3.7/site-packages/ptvsd/daemon.py", line 425, in _install_exit_handlers
self._exithandlers.install()
File "/usr/local/lib/python3.7/site-packages/ptvsd/exit_handlers.py", line 62, in install
self._install_signal_handler()
File "/usr/local/lib/python3.7/site-packages/ptvsd/exit_handlers.py", line 103, in _install_signal_handler
orig[sig] = signal.signal(sig, self._signal_handler)
File "/usr/local/lib/python3.7/signal.py", line 47, in signal
handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
ValueError: signal only works in main thread
Может ли кто-нибудь объяснить мне значение сообщения об ошибке? Что можно исправить для этой проблемы?