VSCode 配置 Docker 远程调试主要有两种场景:本地使用 Dev Container 保证环境一致性,或通过 Remote-SSH 附加到远程服务器运行的容器。最稳的方案是本地开发首选 Dev Container 声明式配置,远程服务器调试需确保端口映射与路径映射准确。
先说结论:本地开发首选 Dev Container 声明式配置,远程服务器调试需确保端口映射与路径映射准确。
- 适合:需要环境复现的新项目或团队协作场景
- 先准备:确认 Docker CLI 可用且当前用户有权限访问 daemon
- 验收:断点能命中且变量可查看,端口可从宿主机访问
核心场景区分
在开始配置前,需明确你的使用场景,两者配置逻辑不同:
- 本地 Dev Container:代码在本地,容器在本地 Docker 引擎运行。适合日常开发,环境隔离好。
- 远程服务器附加:代码在远程服务器,容器在远程服务器运行。需通过 SSH 连接服务器后,再附加到容器。
环境准备与检查
无论哪种场景,均需确保基础环境正常。在 VSCode 扩展市场安装 Dev Containers 和 Remote - SSH 扩展。
本地终端执行以下命令确认 Docker 守护进程正常且当前用户有权限:
# 检查 Docker 是否可用docker info `--format` '{{.OSType}}'# 验证基础运行能力docker run `--rm` hello-world若提示权限错误,需将当前用户加入 docker 组:
sudo usermod -aG docker $USER
# 执行后需重新登录生效方案一:本地 Dev Container 配置
此方案适合新项目或需要严格环境一致性的场景。VSCode 会自动构建容器并将编辑器会话移入容器内。
1. 编写 Dockerfile
在项目根目录创建 Dockerfile,定义基础环境与依赖。以下以 Python 为例:
FROM mcr.microsoft.com/vscode/devcontainers/python:3.11# 设置非 root 用户避免权限问题RUN usermod -s /bin/bash vscodeUSER vscode# 安装项目依赖COPY requirements.txt .RUN pip install -r requirements.txt2. 配置 devcontainer.json
在 .devcontainer/devcontainer.json 中声明容器配置。必须指定 forwardPorts 转发调试端口:
{"name": "Python Dev Container","dockerFile": "../Dockerfile","forwardPorts": [5000, 5678],"customizations": {"vscode": {"extensions": ["ms-python.python"]}},"remoteUser": "vscode"
}3. 配置 launch.json 调试器
这是最关键的一步。在 .vscode/launch.json 中配置调试器。容器内调试器需监听 0.0.0.0 而非 127.0.0.1:
{"version": "0.2.0","configurations": [{"name": "Python: 当前文件","type": "python","request": "launch","program": "${file}","console": "integratedTerminal","justMyCode": false}]
}若使用远程附加模式(Attach),需确保容器内启动参数包含 `--listen` 0.0.0.0:5678。
方案二:远程服务器容器附加
若代码已部署在远程服务器,需先通过 SSH 连接服务器,再附加到运行中的容器。
1. 连接远程服务器
使用 Remote-SSH 扩展连接服务器。连接成功后,VSCode 左下角显示 SSH 主机名。
2. 附加到容器
点击左下角远程指示器,选择 Attach to Running Container。若列表为空,需确保远程服务器 Docker 权限配置正确。
3. 端口映射检查
远程容器启动时必须映射调试端口到宿主机,例如:
docker run -p 5000:5000 -p 5678:5678 my-image否则 VSCode 无法通过 SSH 隧道连接到容器内的调试端口。
验证与排查
配置完成后,按以下步骤验证是否生效:
- 状态栏检查:VSCode 左下角显示
Dev Container: xxx或 SSH 主机名,表示已进入容器环境。 - 断点测试:启动调试后,断点由空心变实心,且能查看变量值。
- 网络访问:在宿主机浏览器访问 forwarded 端口能打开服务页面。
常见坑与解决方案
- 路径映射错误:本地路径与容器路径不一致时,需在
launch.json配置pathMappings,否则断点无法命中。 - 端口绑定限制:调试服务默认监听
localhost会导致宿主机无法连接,必须绑定0.0.0.0。 - 权限混乱:未配置
remoteUser时,容器内生成文件属主为 root,本地编辑后 Git 状态会异常。建议在 Dockerfile 中创建普通用户。 - SSH 隧道失败:远程调试时若连接超时,检查服务器防火墙是否放行调试端口,或尝试在
settings.json中配置remote.SSH.localServerDownload。
参考文档
- VSCode Dev Containers 官方文档
- VSCode Remote SSH 官方文档
- VSCode Python 调试配置
原文链接:https://www.zjcp.cc/ask/11746.html
