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

相关推荐
迷路爸爸18019 分钟前
Docker 入门学习笔记 05:卷到底是什么,为什么容器删了数据却还能保留
笔记·学习·docker
陶瓷好烦29 分钟前
智能编码助手:VSCode+Keil+Kilo Code打造自然语言编程环境
vscode·stm32·单片机
特别关注外国供应商33 分钟前
SSH 的 PrivX OT 工业安全远程访问 (ISRA) 被 分析机构 Industrial Cyber 认可
人工智能·网络安全·ssh·特权访问管理·工业安全远程访问·privx·ot 访问安全
恼书:-(空寄40 分钟前
Docker 进阶核心实战:自定义镜像 + Dockerfile + Docker Compose
docker·容器·docker compose
●VON1 小时前
本地大模型部署实录:从Docker环境搭建到Open WebUI公网访问
运维·docker·容器·大模型
迷路爸爸1801 小时前
Docker 入门学习笔记 03:端口映射到底是什么,为什么容器启动了却访问不到
笔记·学习·docker
迷路爸爸1801 小时前
Docker 入门学习笔记 07:用一个多服务案例真正理解 Docker Compose
运维·笔记·学习·spring cloud·docker·容器·eureka
斯普信云原生组2 小时前
Docker 开源软件应急处理方案及操作手册——Docker 服务启动故障处理
运维·docker·容器
斯普信云原生组2 小时前
Docker 开源软件应急处理方案及操作手册——存储卷与数据持久化问题
docker·容器·eureka
斯普信云原生组2 小时前
Docker 开源软件应急处理方案及操作手册——Docker Compose 应急处理
docker·容器·eureka