Python Docker远程调试VS代码

时间:2018-06-09 21:12:35

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

试图为我的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"
}

1 个答案:

答案 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"