【发布时间】:2020-02-01 17:50:11
【问题描述】:
我正在尝试为 VSCode 上的 dockerized Flask 应用程序配置调试器。为此,我已将 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
容器运行后默认不显示错误。当我尝试从端口 3000 上的 vscode 附加调试器时,没有任何反应。当我在网络浏览器中打开我的应用程序的任何页面时,会出现以下消息:
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
谁能解释一下错误信息的含义?有什么办法可以解决这个问题?
【问题讨论】:
标签: python docker flask visual-studio-code