devcontainer.json必须包含image或build、features(推荐)、customizations.vscode.extensions三项,否则“reopen in container”会卡住;它定义vscode容器化开发环境,实现跨平台一致开发。

VSCode 里点几下就能跑起 Docker 镜像,前提是 devcontainer.json 配置对了,且本地 Docker 服务可用——不是所有镜像都支持开箱即用,Python/Node/Go 官方镜像基本没问题,但自定义镜像得自己加调试入口。
devcontainer.json 必须包含的三项配置
没这三样,VSCode 点 “Reopen in Container” 会卡在构建或连接阶段:
-
"image"或"build"字段二选一:直接指定镜像名(如"python:3.10-slim"),或用"build": { "dockerfile": "./Dockerfile" }指向自定义构建逻辑 -
"features"不是必需但强烈建议:比如加"ghcr.io/devcontainers/features/python:1"能自动装 pip、venv、debugpy,省得自己写 RUN 命令 -
"customizations.vscode.extensions"要显式声明开发所需插件:例如 Python 开发必须写上"ms-python.python",否则容器里打开 .py 文件没语法高亮和智能提示
右键 “Build Image” 和命令行 docker build 的行为差异
VSCode 插件右键构建时默认使用当前工作目录为上下文根,且不传 --no-cache,容易复用旧层导致依赖没更新;而终端手动执行更可控:
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
- 插件构建不显示完整日志流,出错时只弹红框提示“Build failed”,得点右下角小图标展开看具体哪条
RUN指令失败 - 终端中运行
docker build -t myapp --progress=plain .可看到实时输出,配合--progress=plain避免 ANSI 控制符干扰 - 如果 Dockerfile 里用了
COPY ../some-lib ./lib这类跨目录复制,插件构建会报 “no such file or directory”,因为上下文路径固定为当前文件夹,必须改用docker build -f path/to/Dockerfile -t myapp ..
容器启动后无法连接 VSCode 的常见原因
点 “Reopen in Container” 后转圈不动,或提示 “Failed to connect to the remote extension host”,多数不是网络问题:
- Docker Desktop 在 macOS/Windows 上默认启用 WSL2 后端,但某些企业环境禁用了 WSL,需在 Docker Desktop 设置里切回 Hyper-V 或启用 WSL 手动安装组件
- Linux 用户没把当前用户加进
docker组,docker ps都要 sudo,VSCode 插件根本拿不到 socket 连接权限,错误信息是Cannot connect to the Docker daemon at unix:///var/run/docker.sock -
devcontainer.json里漏了"postCreateCommand",而镜像本身没预装openssh-server或没暴露 22 端口,VSCode 就没法建立 SSH 通道——官方 Python 镜像默认不含 sshd,必须靠features或自定义 Dockerfile 补上
真正麻烦的是多阶段构建镜像里没保留调试工具链,比如用 FROM golang:alpine AS builder 编译完再 COPY --from=builder /app /app 到 scratch 镜像,结果连 sh 都没有,VSCode 连终端都打不开。这种镜像不能直接当 devcontainer 用,得额外加一个带调试环境的 stage 或换基础镜像。










