【问题标题】:Python Docker Remote Debugging VS CodePython Docker 远程调试 VS 代码
【发布时间】:2018-11-19 13:46:21
【问题描述】:

尝试为我的 python 烧瓶 API 进行远程调试。我能够 docker-compose up 并让邮递员成功调用正在运行的容器,但是当我尝试附加调试器时,它永远不会编译。下面是我的 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'

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

VSCode 启动设置

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

【问题讨论】:

  • 请试一试实验性调试器,看看是否能解决问题。还要确保在 Docker 容器 (code.visualstudio.com/docs/python/debugging#_remote-debugging) 中安装了 ptvsd
  • 谢谢,我终于可以使用 reg 调试器了!即使有更新的版本(3.2.1),ptvsd 也是 3.0.0 也是非常重要的

标签: python docker visual-studio-code docker-compose


【解决方案1】:

我终于让它与远程调试一起工作。我必须在我的本地 pip3 install ptvsd==3.0.0 ,并确保我的 docker 容器的 requirements.txt 具有相同的版本。 (注:最新版本 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: ')

我还为烧瓶应用程序从 app.py 中的 app.run() 中删除了调试 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"

【讨论】:

  • 我让调试器使用您的 github 代码进行连接,但是当我在浏览器中访问 localhost:3000 的站点时,它不会在我的断点处停止执行。任何帮助将不胜感激。
  • 没关系,我必须将 ptvsd 代码放在文件顶部。
  • 一切都在这篇博文中指定vinta.ws/code/…试试这个。
猜你喜欢
  • 2017-03-07
  • 2021-03-17
  • 2018-01-20
  • 2022-11-15
  • 1970-01-01
  • 2021-06-14
  • 2010-11-08
  • 1970-01-01
  • 2014-03-16
相关资源
最近更新 更多