remote-containers扩展+devcontainer.json启动调试更稳可靠,因环境、插件、端口、权限全预配;attach方式依赖进程主动暴露调试协议,易断连或断点失效;devcontainer.json须置于项目根目录下.devcontainer/中,且必含image或build、customizations.vscode.extensions、forwardports等关键字段。

直接用 Remote - Containers 扩展 + devcontainer.json 启动容器调试,比 attach 到运行中容器更稳、断点更可靠。 attach 方式依赖进程主动暴露调试协议(如 ptvsd 或 debugpy 的监听端口),稍有配置偏差就卡在 “Connecting…” 或断点变空心圆;而 devcontainer 是从启动那一刻就把开发环境、插件、端口映射、用户权限全配齐,调试链路天然闭环。
devcontainer.json 必须放对位置、字段不能少
VSCode 只识别项目根目录下 .devcontainer/devcontainer.json 这一个路径。放错(比如丢进 .vscode/ 或和项目平级)就完全没反应,点 “Reopen in Container” 会静默失败。
以下三个字段至少得有其一:
-
"image":快速验证用,例如"mcr.microsoft.com/vscode/devcontainers/python:3.11-bullseye" -
"build":要加系统级依赖(如libpq-dev、curl)时必须用,且Dockerfile必须放在.devcontainer/Dockerfile,内容需基于dev-containers/base或显式安装vscode-server -
"customizations.vscode.extensions":必须显式列出插件,例如["ms-python.python", "ms-python.vscode-pylance"];容器不会继承你本地装的插件
forwardPorts 不填,Flask/Django 就等于白跑
你在容器里执行 flask run --port=5000,宿主机浏览器打不开 localhost:5000?八成是漏了 "forwardPorts": [5000]。这不是可选功能,是调试刚需。
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
- 不填,端口默认不暴露,
curl localhost:5000在宿主机上直接失败 - 多个服务要同时调试?写成数组,例如
[5000, 8000, 3000] - 填了还连不上?先确认容器内服务监听的是
0.0.0.0:5000,不是127.0.0.1:5000
remoteUser + runArgs 是文件权限问题的唯一稳解
新建的 Python 文件在 VSCode 里显示属主为 root:root,但 git status 却报 permission denied?这是最常被忽略的权限断裂点。
根本原因是宿主机 UID(比如 1001)和容器内默认用户(通常是 root)不匹配。解决方式只有一套组合拳:
- 在
devcontainer.json中加这两行:"remoteUser": "vscode""runArgs": ["--user", "vscode"] - 如果用了自定义
Dockerfile,必须在里面创建该用户并加进sudo组:RUN useradd -m -u 1001 -G sudo vscode && echo "vscode ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/vscode
最容易被忽略的是 remoteUser 和 runArgs 的配合——单设 remoteUser 而不加 runArgs,VSCode 仍会以 root 启动容器进程,权限问题照旧;反过来,只加 runArgs 不指定 remoteUser,VSCode 无法正确切换终端与文件属主。两者必须成对出现,缺一不可。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










