自存 | 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 插件的更多细节吗?

相关推荐
帅得不敢出门2 小时前
MacOS安装VSCode在QEMU上模拟跑FreeRtos
ide·vscode·macos·freertos·rtos
FriendshipT2 小时前
Ultralytics Docker 安装使用教程(以训练 YOLO26 模型为例)
linux·运维·人工智能·目标检测·ubuntu·docker·容器
FriendshipT2 小时前
Ubuntu 20.04 LTS 安装 Docker 指南
linux·ubuntu·docker
咯哦哦哦哦2 小时前
windows下VSCode配置C++/CMake/Qt/MVSC 开发环境 【电脑已经安装vs2022】
c++·vscode·qt
信鸽爱好者2 小时前
RTX5060 GPU CUDA12.8 +vscode 设计一个torch实例程序
人工智能·vscode·深度学习·编辑器
万象.2 小时前
docker虚拟化,容器化的原理与实现
运维·docker·容器
蓝天星空2 小时前
docker部署 asp.net程序
docker·容器·asp.net
~莫子3 小时前
Docker镜像构建
运维·docker·容器
吹牛不交税4 小时前
vue3项目部署到阿里云Alibaba Cloud Linux3系统的docker
docker·容器·.netcore