如何使用VS代码

时间:2016-10-25 07:32:19

标签: python docker visual-studio-code remote-debugging

我刚刚注册了这个问题。它是否可以使用VS Code在Docker Container中远程调试python代码。 我在这里有一个完全配置的Docker容器。我得到了一些帮助,无论如何我对码头工人来说都是新手。在它运行Odoo v10。但我不能让VS Code中的远程调试工作。我尝试了this解释,但我并没有真正理解。 它甚至可能吗?如果是,我怎样才能让它发挥作用? 我使用VS Code 1.6.1运行Kubuntu 16.04,使用Don Jayamanne运行Python扩展。 啊是的,我希望我能在这个问题上找到合适的位置并且它不违反任何规则。

更新

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

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 Code配置适应docker-compose.yml。这意味着我只需将launch.json更改为端口8069(默认的Odoo端口),只需要使用docker-compose up,然后调试就可以在VS Code中运行。 不幸的是,使用ptvsd有点破坏了我的Odoo环境,但至少我现在可以调试了。谢谢!

3 个答案:

答案 0 :(得分:8)

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

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

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

然后使用docker inspect获取正在运行的容器的IP地址,以及用于启动文件中host的内容。

答案 1 :(得分:1)

vscode 1.45.0 及更高版本一起使用。参考文件https://gist.github.com/kerbrose/e646aaf9daece42b46091e2ca0eb55d0

1-编辑您的docker.dev文件并插入RUN pip3 install -U debugpy。这将安装一个python软件包debugpy而不是已弃用的软件包ptvsd,因为您的vscode(本地)将使用它与docker镜像的debugpy(远程)服务器通信。

2-启动您的容器。但是,您将启动刚安装debugpy的python软件包。它可能是您shell中的下一个命令。

docker-compose run --rm -p 8888:3001 -p 8879:8069 {DOCKER IMAGE[:TAG|@DIGEST]} /usr/bin/python3 -m debugpy --listen 0.0.0.0:3001 /usr/bin/odoo --db_user=odoo --db_host=db --db_password=odoo

3-按照以下步骤准备启动器文件。请注意,port与odoo服务器有关。 debugServer将成为调试服务器的端口

{
    "name": "Odoo: Attach",
    "type": "python",
    "request": "attach",
    "port": 8879,
    "debugServer": 8888,
    "host": "localhost",
    "pathMappings": [
        {
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "/mnt/extra-addons",
        }
    ],
    "logToFile": true

答案 2 :(得分:0)

如果您想逐步了解如何在容器中为 VS 代码附加远程调试器,您可以查看 YouTube 视频 "Debuggeing Python in Docker using VSCode"

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