私の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"
}
ついにリモートデバッグで動作するようになりました。私は自分のローカルに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"