Par*_*ess 6 python docker docker-compose visual-studio-code
试图获取我的python flask API的远程调试信息。我能够docker-compose起来,让邮递员成功调用正在运行的容器,但是当我尝试连接调试器时,它永远不会编译。以下是我的yml,dockerfile和vscode启动设置...我得到的以下错误是:
启动调试服务器时出错。错误= {“代码”:“ ECONNREFUSED”,“ errno”:“ ECONNREFUSED”,“ syscall”:“连接”,“地址”:“ 127.0.0.1”,“端口”:5050}
version: '2'
services:
website:
build: .
command: >
python ./nomz/app.py
environment:
PYTHONUNBUFFERED: 'true'
volumes:
- '.:/nomz'
ports:
- '5000:5000'
- '5050'
Run Code Online (Sandbox Code Playgroud)
Docker文件
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
Run Code Online (Sandbox Code Playgroud)
VSCode启动设置
{
"name": "Python: Attach",
"type": "python",
"request": "attach",
"localRoot": "${workspaceFolder}/nomz/app.py",
"remoteRoot": "/nomz/",
"port": 5050,
"host": "localhost"
}
Run Code Online (Sandbox Code Playgroud)
我终于通过远程调试让它工作了。我必须在本地 pip3 install ptvsd==3.0.0 ,并确保我的 docker 容器的requirements.txt 具有相同的版本。(注:最新版本3.2.1不起作用)
@BrettCannon 有一个很好的教程的正确链接 https://code.visualstudio.com/docs/python/debugging#_remote-debugging
我要做的就是向 Flask 应用程序的 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: ')
Run Code Online (Sandbox Code Playgroud)
我还从 Flask 应用程序的 app.py 中的 app.run() 中删除了 debug kwarg。这一切使我能够连接调试器,但断点处于“未验证”位置,因此最后必须发生的事情是remoteRoot 的launch.json 中app.py 的路径。我会说我创建了一个小型测试 api 来让它工作,它只需要第一级路径(即 /app 而不是 /app/app/app.py)这里是我制作的测试 api 的 github (https://github.com/tomParty/docker_python)。因此,如果调试器正在附加,但您的断点未经验证,请尝试使用 RemoteRoot 的路径
"remoteRoot": "/nomz/nomz/app.py"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5033 次 |
| 最近记录: |