web-dev-qa-db-ja.com

Python Docker Remote Debugging VS Code

私のpython flask APIのリモートデバッグを取得しようとしています。Dockerで構成し、postmanで実行中のコンテナを正常に呼び出すことができますが、デバッガーを接続しようとすると、コンパイルされません。以下は、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'

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"
}
7
Partyless

ついにリモートデバッグで動作するようになりました。私は自分のローカルにptv3d ptvsd == 3.0.0をインストールする必要があり、Dockerコンテナーのrequirements.txtが同じバージョンであることを確認しました。 (注:最新バージョン3.2.1は機能しませんでした)

@BrettCannonには適切なチュートリアルへの正しいリンクがありました https://code.visualstudio.com/docs/python/debugging#_remote-debugging

flask appの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: ')

また、flask appの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"
4
Partyless