VS Code 通过 Docker 插件集成 Docker,但不替代 CLI 工具;需预先安装并验证 docker 命令可用,安装官方插件后可右键构建镜像、启动 compose 服务,部署需手动处理镜像打标、登录 registry 和远程运行。

VS Code 本身不直接构建或运行 Docker 容器,它通过插件和 CLI 工具协同完成集成;真正的构建、运行、部署动作仍由本地 docker 命令或远程 Docker daemon 执行,VS Code 只是提供配置引导、命令封装和可视化界面。
安装必要插件并验证 Docker CLI 可用性
VS Code 的 Docker 集成依赖两个基础条件:系统已安装且可执行 docker(含 docker build、docker run 等),以及安装官方 Docker 插件(由 Microsoft 提供)。
- 在终端运行
docker --version和docker info,确认 daemon 正常响应;若提示Cannot connect to the Docker daemon,说明 Docker Desktop 未启动或 WSL2 后端未就绪(Windows 用户常见) - VS Code 中打开 Extensions(Ctrl+Shift+X),搜索并安装
Docker插件;安装后重启 VS Code,左侧活动栏会出现鲸鱼图标 - 插件不会自动帮你装 Docker,也不会替代
docker-compose或buildx—— 它只读取项目中的Dockerfile、docker-compose.yml并提供右键菜单和命令面板快捷入口
在项目中添加 Dockerfile 后如何一键构建镜像
插件检测到根目录或子目录存在 Dockerfile,会自动激活上下文菜单。但“一键构建”不是魔法,它本质是调用 docker build 并传入预设参数。
- 右键点击
Dockerfile→ 选择Build Image...,会弹出输入框让你填写镜像名(如myapp:latest)和构建上下文路径(默认.,但若Dockerfile在./docker/下,需手动改为./docker) - 构建过程输出直接显示在 VS Code 的
Terminal > Docker面板,等同于你手动执行docker build -t myapp:latest . - 注意:插件默认不启用
--no-cache或--progress=plain,如需调试构建层缓存问题,仍得切到终端手动加参数 - 若项目使用多阶段构建(如
FROM golang AS builder),插件支持指定--target,但需在右键菜单中选Build Image with Target...,再输入目标阶段名
用 docker-compose.yml 启动服务时为什么容器没起来
VS Code 的 Docker 插件能识别 docker-compose.yml,但“启动”操作仅调用 docker compose up(v2)或 docker-compose up(v1),不处理环境变量缺失、端口冲突或依赖服务未就绪等问题。
- 确保文件名为
docker-compose.yml(不是.yaml)且缩进为空格(YAML 对缩进敏感) - 检查
services.xxx.ports是否写成字符串(如"3000:3000")而非数组(- "3000:3000"),否则插件可能解析失败 - 右键
docker-compose.yml→Compose Up,若终端报错ERROR: for app Cannot start service app: driver failed programming external connectivity,大概率是 3000 端口已被占用,需先lsof -i :3000(macOS/Linux)或netstat -ano | findstr :3000(Windows)查杀进程 - 插件不自动加载
.env文件里的变量(如POSTGRES_PASSWORD),必须确保该文件存在且格式为KEY=VALUE每行一条,Docker Compose CLI 才会读取
远程部署到服务器前要确认的三件事
VS Code 的 Docker 插件不提供 SSH 部署能力,所谓“部署”实际是本地构建 + 推送到远程 registry + 远程服务器拉取运行,中间环节需人工衔接。
- 本地镜像必须打上带 registry 地址的 tag,例如
docker tag myapp:latest registry.example.com/myapp:prod,否则docker push会报denied: requested access to the resource is denied - 推送前需登录:
docker login registry.example.com;插件不保存凭据,每次新机器都要重登 - 远程服务器上不能只靠
docker run启动,生产环境应使用systemd或docker-compose管理生命周期;VS Code 无法直接触发远程systemctl restart myapp,这部分需另配 CI 脚本或手动操作
真正卡住人的往往不是 VS Code 点几下,而是 Dockerfile 中 COPY 路径写错、docker-compose.yml 里 depends_on 没配健康检查、或者 registry 权限没开——这些细节 VS Code 插件既不校验也不提示,得靠你盯着终端输出逐行比对。










