You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在关闭VS Code文件夹时自动执行Docker相关Shell任务?

实现VS Code关闭文件夹时自动清理Docker资源

VS Code原生任务系统没有直接提供folderClose触发条件,但可以通过以下几种方式实现你要的需求:

1. 借助专用扩展(最简便的方案)

安装Workspace Lifecycle Tasks扩展后,就能在tasks.json里用runOn: "workspaceClose"来触发关闭工作区时的任务。

配置示例

修改你的tasks.json,添加清理Docker资源的任务:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Start Docker",
            "type": "shell",
            "runOptions": {
                "runOn": "folderOpen"
            },
            "osx": {
                "command": "open -a Docker"
            },
            "problemMatcher": []
        },
        {
            "label": "Cleanup Docker Resources",
            "type": "shell",
            "runOptions": {
                "runOn": "workspaceClose" // 该触发条件由扩展提供
            },
            "osx": {
                "command": "docker stop $(docker ps -aq) && docker rm $(docker ps -aq) && docker volume prune -f"
            },
            "problemMatcher": []
        }
    ]
}

说明:

  • docker stop $(docker ps -aq):停止所有运行中的容器
  • docker rm $(docker ps -aq):删除所有已停止的容器
  • docker volume prune -f:强制清理未被使用的卷
    如果你只需要清理特定容器/卷,把命令改成指定名称即可,比如:docker stop my-app-container && docker rm my-app-container && docker rm my-app-volume

2. 原生手动触发方案(无需扩展)

如果不想安装扩展,可以创建一个手动触发的清理任务,然后在关闭文件夹前手动执行:
在tasks.json中添加:

{
    "label": "Cleanup Docker Resources",
    "type": "shell",
    "osx": {
        "command": "docker stop $(docker ps -aq) && docker rm $(docker ps -aq) && docker volume prune -f"
    },
    "problemMatcher": []
}

执行时按Cmd+Shift+B,选择这个任务即可。你也可以给它绑定快捷键,在keybindings.json中添加:

{
    "key": "cmd+shift+c",
    "command": "workbench.action.tasks.runTask",
    "args": "Cleanup Docker Resources"
}

3. 自定义监控脚本(进阶方案)

写一个Shell脚本,在打开文件夹时启动,监控VS Code的工作区进程,当检测到工作区关闭时执行清理命令。不过这种方式需要自己维护脚本,适合有一定Shell基础的用户。

内容的提问来源于stack exchange,提问作者jalv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:25:03