如何使用 VS Code 远程调试 Docker 容器中的 Python 代码

新手上路,请多包涵

我刚刚注册了这个问题。这是关于是否可以使用 VS Code 在 Docker 容器中远程调试 python 代码。我在这里有一个完全配置的 Docker 容器。我得到了一些帮助,而且我对 docker 还是很陌生。其中运行 Odoo v10。但是我无法在 VS Code 中进行远程调试。我试过 这个 解释,但我真的不明白。有可能吗?如果是,我怎样才能让它工作?我正在运行带有 VS Code 1.6.1 和 Don Jayamanne 的 Python 扩展的 Kubuntu 16.04。啊是的,我希望我在这个问题上的正确位置并且不违反任何规则。

更新:

刚刚尝试了埃尔顿斯通曼的方式。有了它,我收到了这个错误:

 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 Code 中进行调试。不幸的是,使用 ptvsd 有点破坏了我的 Odoo 环境,但至少我现在可以调试了。谢谢!

原文由 Brotbret 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

是的,这是可能的——当 Python 应用程序在 Docker 容器中运行时,您可以将其视为远程机器。

在您的 Docker 映像中,您需要使远程调试端口可用(例如 EXPOSE 3000 在 Dockerfile 中),包括 ptvsd 在您的 Python 应用程序中设置,然后发布端口当你运行容器时,是这样的:

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

然后使用 docker inspect 获取正在运行的容器的 IP 地址,这就是您在启动文件中用于 host 的地址。

原文由 Elton Stoneman 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您想逐步了解如何在容器中附加 VS 代码的远程调试器,您可以查看 youtube 视频 “使用 VSCode 在 Docker 中调试 Python”

他还谈到了如何配置 Docker 文件,使容器在生产模式下运行时不包含调试器。

原文由 KrisR89 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题