web-dev-qa-db-ja.com

VSコードを使用したDockerコンテナのコー​​ドをリモートデバッグする方法pythonコード

この質問に登録しました。リモートデバッグが可能かどうかについてですpython VS Codeを使用したDockerコンテナー内のコード。ここで完全に構成されたDockerコンテナーを使用しています。少し手伝いました。 mとにかくdockerの新機能です。Odoov10を実行していますが、VS Codeでリモートデバッグを機能させることができません。 this の説明を試しましたが、実際にはわかりません。可能ですか?はい、どうすればそれを機能させることができますか?VS Code 1.6.1とPython Extension from Don Jayamanneの拡張機能を使用してKubuntu 16.04を実行しています。ああそうだといいのですがこの質問で正しい場所にいて、それはいかなる規則にも違反していません。

UPDATE:

エルトン・ストーンマンのやり方を試しました。それで私はこのエラーを得ています:

There was an error in starting the debug server. 
Error = {"code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect",
         "address":"172.21.0.4","port":3000}

私のDockerfileは次のようになります:

FROM **cut_out**
USER root
# debug/dev settings

RUN pip install \
        watchdog

COPY workspace/pysrc /pysrc
RUN apt-get update \
 && apt-get install -y --no-install-recommends \
        build-essential \
        python-dev \
 && /usr/bin/python /pysrc/setup_cython.py build_ext --inplace \
 && rm -rf /var/lib/apt/lists/*

EXPOSE 3000

USER odoo

私のDockerfileのpysrcは、以前はPyDev(Eclipse)での作業を目的としていたため、そこにあります。

これは、私が使用したrun commandです。

docker-compose run -d -p 3000:3000 odoo

そして、これは私のlaunch.jsonの重要な部分です:

    {
        "name": "Attach (Remote Debug)",
        "type": "python",
        "request": "attach",
        "localRoot": "${workspaceRoot}",
        "remoteRoot": "${workspaceRoot}",
        "port": 3000,
        "secret": "my_secret",
        "Host": "172.21.0.4"
    }

今のところそれで十分だと思います。

更新2:

さて、私は解決策を見つけました。私はDockerがどのように機能するかを完全に誤解し、まったく間違って試してみました。私はすでに完全に構​​成されたDocker-composeを持っています。だから私がしなければならなかったすべては私のVSコード設定をdocker-compose.ymlに適合させることでした。つまり、launch.jsonをポート8069(デフォルトのOdooポート)に変更し、docker-compose upを使用するだけで、VSコードでデバッグが機能します。残念ながらptvsdを使用するとOdoo環境が破壊されますが、少なくとも今はデバッグできます。ありがとう!

13
Brotbret

はい、可能です。PythonアプリがDockerコンテナで実行されている場合、リモートマシンのように扱うことができます。

Dockerイメージで、リモートデバッグポートを利用できるようにする必要があります(例:DockerfileのEXPOSE 3000)。ptvsdセットアップをPythonアプリに含めます、コンテナの実行時にポートを公開します。

docker run -d -p 3000:3000 my-image

次に、docker inspectを使用して、実行中のコンテナのIPアドレスを取得します。これは、起動ファイルのHostに使用するものです。

8
Elton Stoneman