自存 | VSCode+SSH+Docker远程Python Debugger

在 VS Code 中连接远程服务器并调试 Docker 容器内的 Python 项目,主要有两种主流且高效的方式。

看到你已经成功运行了名为 ncsb-debug 的容器,并且映射了 8000 端口。你可以根据实际需求选择以下两种方法:


方法一:使用 Dev Containers 插件直接"进入"容器(⭐ 最推荐,体验等同本地开发)

这是目前 VS Code 官方最推荐的做法。它允许你直接把 VS Code 的后端运行在 Docker 容器内部,你可以直接浏览容器内的文件系统、使用终端,并且像调试本地代码一样无缝调试。

步骤:

  1. 安装必要插件:

    在本地电脑的 VS Code 中,安装以下两个官方插件:

    • Remote - SSH (用于连接远程服务器)

    • Dev Containers (用于连接 Docker 容器)

  2. 连接到远程服务器:

    点击 VS Code 左下角的 >< 绿色/蓝色图标,选择 Connect to Host...,通过 SSH 连接到你的远程物理机。

  3. 附加到运行中的容器:

    • SSH 连接成功后,按下 Ctrl+Shift+P (或 Cmd+Shift+P) 打开命令面板。

    • 输入并选择 Dev Containers: Attach to Running Container...

    • VS Code 会列出远程服务器上正在运行的容器,选择你的容器 ncsb-debug

  4. 在容器内配置工作区:

    • 这时会打开一个新的 VS Code 窗口,代表你已经"进入"了容器内部。

    • 点击"打开文件夹",选择你的 Python 项目在容器内的绝对路径(例如 /app/opt/workspace 等)。

    • 关键一步 :在当前这个连接到容器的 VS Code 窗口中,打开插件市场,安装 Python 插件(注意:它会提示 "Install in Container ncsb-debug",点击安装)。

  5. 开始调试:

    • 在左侧菜单打开"运行和调试"(Ctrl+Shift+D),点击"创建 launch.json 文件",选择 Python Debugger -> Python File

    • 打好断点,按 F5 即可完美开始调试。


方法二:使用 debugpy 通过暴露的端口附加调试 (Remote Attach)

如果你不想在容器里安装 VS Code Server 环境,或者你想直接利用你已经暴露出来的 8000 端口,可以使用这种传统的网络附加调试法。

步骤:

  1. 在容器内的 Python 环境安装 debugpy

    确保你的容器内安装了调试库。进入容器执行:
    Bash

    复制代码
    pip install debugpy
  2. 修改容器内 Python 项目的启动命令:

    你需要让 Python 项目通过 debugpy 启动,并监听 8000 端口。

    假设你原来的启动命令是 python main.py,现在需要改为:
    Bash

    复制代码
    python -m debugpy --listen 0.0.0.0:8000 main.py

    (💡 提示:如果希望程序暂停,直到你的 VS Code 连上才继续往下走,可以加上 --wait-for-client 参数:python -m debugpy --listen 0.0.0.0:8000 --wait-for-client main.py)

  3. 在 VS Code 中配置远程监听:

    • 在你的本地电脑上(或者通过 Remote SSH 连接到服务器的工作区中)打开你的代码文件夹。

    • 进入"运行和调试"面板,创建或打开 .vscode/launch.json,添加以下配置:

    JSON

    复制代码
    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Python: Remote Attach (Docker on Port 8000)",
                "type": "python",
                "request": "attach",
                "connect": {
                    "host": "你的远程物理机IP", // 如果你是通过 SSH 连接到了物理机并在那打开了 VSCode,这里填 "127.0.0.1" 即可
                    "port": 8000
                },
                "pathMappings": [
                    {
                        "localRoot": "${workspaceFolder}", // 这里是 VS Code 当前打开的代码目录
                        "remoteRoot": "/your/project/path/in/container" // 【重点】这里必须替换为你代码在容器内部的绝对路径!
                    }
                ],
                "justMyCode": true
            }
        ]
    }
  4. 开始调试:

    确保容器内的代码已经用 debugpy 跑起来了。然后在 VS Code 中选择刚才配置的 Python: Remote Attach,按 F5 连接。只要断点变红,就说明连接成功了!


总结建议:

如果你需要经常修改代码并调试,强烈建议使用方法一 。因为方法二中的 pathMappings(路径映射)很容易因为本地代码和容器内代码不一致而导致断点无法命中。方法一直接读取和执行容器内的代码,零心智负担。

你需要我为你详细说明 launch.json 中具体的路径该如何填写,或者关于安装 Dev Containers 插件的更多细节吗?

相关推荐
Jerry小杰6 小时前
运维神器|单端口搞定多台内网SSH!frp端口复用终极教程
运维·ssh
水中加点糖6 小时前
Java中使用远程PlayWright进行网页接口测试(附Docker部署方式)
java·docker·web测试·devtools·playwright·ai自动化测试
BD_Marathon8 小时前
xshell无法连接上centos7
ssh
梦梦代码精8 小时前
PHP 还是 Java?LikeShop 多版本对比,附6条落地避坑建议
低代码·docker·开源·代码规范
zerwave9 小时前
深入理解 Docker 的“层”(Layer)
docker·容器
霁月的小屋10 小时前
Docker 工程化实践(二):理解镜像分层与容器文件系统
运维·docker·容器
Irene19911 天前
怎么设置 PyCharm 使用 VSCode 的快捷键,推荐保留的原生快捷键(特色功能不建议覆盖,否则丧失效率优势)Ctrl+Alt+L:代码格式化
vscode·pycharm·快捷键
码上上班1 天前
docker课程
java·docker·容器
放学校门口见1 天前
vscode部署stm32开发调试环境
ide·vscode·stm32
取谖慕12.1 天前
Docker容器从入门到精通
docker·容器·eureka