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

相关推荐
疯狂成瘾者14 分钟前
对比JAR 包部署 vs Docker 部署方式
java·docker·jar
ℳ₯㎕ddzོꦿ࿐1 小时前
实战:在 Linux 系统用 Docker-Compose 优雅部署 GitLab 及防坑指南
linux·docker·gitlab
invicinble1 小时前
对于docker相关的理解
运维·docker·容器
今天又在写代码1 小时前
Docker部署
java·阿里云·docker
YaBingSec1 小时前
玄机网络安全靶场:GeoServer XXE 任意文件读取(CVE-2025-58360)
java·运维·网络·安全·web安全·tomcat·ssh
AI服务老曹1 小时前
深度解析:支持异构计算与 Docker 部署的 AI 视频管理平台——基于 GB28181/RTSP 与源码交付的架构实战
人工智能·docker·音视频
#君君#2 小时前
ros2 下VSCode 中显示波浪线(找不到定义)原因
ide·vscode·编辑器
liao__ran2 小时前
Kubernetes攻防 Docker in Docker
docker·容器·kubernetes
芋头莎莎2 小时前
ESP32 +VSCode与搭建开发环境教程
vscode·单片机
杨浦老苏10 小时前
大模型安全接入网关LinkAI
人工智能·docker·ai·群晖·隐私保护