如何使用 VS Code 在 Docker 容器中远程调试 python 代码
How to remote debug python code in a Docker Container with VS Code
我刚刚注册了这个问题。这是关于是否可以使用 VS Code 在 Docker 容器中远程调试 python 代码。
我这里有一个完全配置的 Docker 容器。我得到了一些帮助,而且我对 docker 还是很陌生。其中运行 Odoo v10。但是我无法在 VS Code 中进行远程调试。我试过 this 解释,但我不太明白。
有可能吗?如果是,我怎样才能让它工作?
我是 运行 Kubuntu 16.04,带有 VS Code 1.6.1 和来自 Don Jayamanne 的 Python 扩展。
啊是的,我希望我在正确的位置提出这个问题并且它不违反任何规则。
更新:
刚试过Elton Stoneman的方法。有了它,我收到了这个错误:
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
我的 Docker 文件中的 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 环境,但至少我现在可以调试了。谢谢!
是的,这是可能的 - 当 Python 应用程序 运行 在 Docker 容器中时,您可以将其视为远程机器。
在您的 Docker 映像中,您需要使远程调试端口可用(例如 Docker 文件中的 EXPOSE 3000
),包括 ptvsd
设置在您的 Python 应用程序中,然后在您 运行 容器时发布端口,例如:
docker run -d -p 3000:3000 my-image
然后使用docker inspect
获取运行ning容器的IP地址,这就是你在launch文件中host
使用的IP地址。
适用于 vscode 1.45.0 及更高版本。供参考文件 https://gist.github.com/kerbrose/e646aaf9daece42b46091e2ca0eb55d0
1- 编辑您的 docker.dev
文件并插入 RUN pip3 install -U debugpy
。这将安装一个 python 包 debugpy
而不是已弃用的包 ptvsd
因为你的 vscode (本地)将与你的 debugpy
(远程)服务器通信docker 使用它的图像。
2- 启动您的容器。但是,您将启动刚刚安装的 python 软件包 debugpy
。它可能是您 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
}
如果您想逐步了解如何在容器中附加 VS 代码的远程调试器,您可以查看 youtube 视频 "Debugging Python in Docker using VSCode"。
他还谈到了如何配置 Docker 文件,以便在生产模式下 运行 时容器不包含调试器。
我刚刚注册了这个问题。这是关于是否可以使用 VS Code 在 Docker 容器中远程调试 python 代码。 我这里有一个完全配置的 Docker 容器。我得到了一些帮助,而且我对 docker 还是很陌生。其中运行 Odoo v10。但是我无法在 VS Code 中进行远程调试。我试过 this 解释,但我不太明白。 有可能吗?如果是,我怎样才能让它工作? 我是 运行 Kubuntu 16.04,带有 VS Code 1.6.1 和来自 Don Jayamanne 的 Python 扩展。 啊是的,我希望我在正确的位置提出这个问题并且它不违反任何规则。
更新:
刚试过Elton Stoneman的方法。有了它,我收到了这个错误:
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
我的 Docker 文件中的 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 环境,但至少我现在可以调试了。谢谢!
是的,这是可能的 - 当 Python 应用程序 运行 在 Docker 容器中时,您可以将其视为远程机器。
在您的 Docker 映像中,您需要使远程调试端口可用(例如 Docker 文件中的 EXPOSE 3000
),包括 ptvsd
设置在您的 Python 应用程序中,然后在您 运行 容器时发布端口,例如:
docker run -d -p 3000:3000 my-image
然后使用docker inspect
获取运行ning容器的IP地址,这就是你在launch文件中host
使用的IP地址。
适用于 vscode 1.45.0 及更高版本。供参考文件 https://gist.github.com/kerbrose/e646aaf9daece42b46091e2ca0eb55d0
1- 编辑您的 docker.dev
文件并插入 RUN pip3 install -U debugpy
。这将安装一个 python 包 debugpy
而不是已弃用的包 ptvsd
因为你的 vscode (本地)将与你的 debugpy
(远程)服务器通信docker 使用它的图像。
2- 启动您的容器。但是,您将启动刚刚安装的 python 软件包 debugpy
。它可能是您 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
}
如果您想逐步了解如何在容器中附加 VS 代码的远程调试器,您可以查看 youtube 视频 "Debugging Python in Docker using VSCode"。
他还谈到了如何配置 Docker 文件,以便在生产模式下 运行 时容器不包含调试器。