试图为我的python flask API进行远程调试。我能够使用docker-compose并让邮递员成功调用正在运行的容器,但是当我尝试连接调试器时,它从不编译。下面是我的yml,dockerfile和vscode启动设置......我得到以下错误:
启动调试服务器时出错。错误= {"代码":" ECONNREFUSED","错误":" ECONNREFUSED","系统调用":&# 34;连接""地址":" 127.0.0.1""端口":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"
}
答案 0 :(得分:2)
我终于让它与远程调试一起工作了。我不得不在我的本地pip3安装ptvsd == 3.0.0,并确保我的docker容器的requirements.txt具有相同的版本。 (注意:最新版本3.2.1没有工作)
@BrettCannon有一个很好的教程的正确链接 https://code.visualstudio.com/docs/python/debugging#_remote-debugging
我必须做的是在烧瓶app的app.py中添加一些代码。我最初在启动容器时得到了地址已经在使用错误,所以我添加了套接字代码,在第一次成功连接调试器之后我似乎不再需要它了(奇怪我知道,但是那个' s为什么我把它留下以防其他人得到那个错误)
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.py中的app.run()中取出了烧瓶app。 这一切都让我有能力连接调试器,但断点在哪里"未验证",所以最后必须发生的是remote.Root的launch.json中的app.py路径。我会说我创建了一个小的测试api来使这个工作,它只需要第一级路径(即。/ app而不是/app/app/app.py)这里是我做的测试api的github( https://github.com/tomParty/docker_python)。因此,如果调试器正在附加,但您的断点未经验证,请使用remoteRoot的路径
"remoteRoot": "/nomz/nomz/app.py"