packages/dsh-remote-web-ui
zhu1090093659/dsh-web手机/PC 远程操控 dsh web 工作区:扫码配对、令牌门控通道、SSE 实时同步,提供移动端与完整桌面 GUI 两种远程形态。
dsh-docker 是 DeepSeek Harness Web 的 Docker 管理面板插件:支持本机 CLI 与 SSH 远端多目标一键切换,统一管理 Docker MCP(部署/移除/搜索官方 Catalog/启停重启 Gateway/自定义部署)与容器镜像(启停/删除/日志/详情/交互式终端/新建/构建/导入)。凭据经 Windows DPAPI 加密存储,HTTP 仅限本机 loopback 访问,命令参数白名单防注入;免构建、纯 ESM、Client 零依赖。
DeepSeek Harness (DSH) Web 插件 · Docker 管理面板(Docker MCP Gateway 管理 + 容器/镜像管理)
dsh-docker(插件 id:dsh-docker)是 DeepSeek Harness Web GUI 的侧边栏「Docker」面板插件。它把 Docker 生态的两大类操作统一放进一个免构建的 Web 面板:
支持多管理目标:可在「本机 CLI」与「SSH 远端服务器」之间切换,切换后所有 tab(MCP / 容器 / 镜像)都针对当前目标。
docker / docker mcp 命令,容器操作经当前 docker context 连接 daemondocker mcp CLI,管理远端的 Docker Engine 与 MCPdocker mcp)mcp/sqlite 需先本地 docker pull 成功,gateway 以 --pull never 加载本地镜像)docker exec -it,SSH 目标支持)/ 清理停止容器docker run,支持端口、环境变量、卷、命令参数;默认开启「保持运行」(未填命令时自动追加 tail -f /dev/null 保活,防止容器启动后退出)docker build)/ 导入(docker load)/ 运行 / 单个删除 / 批量勾选删除(表格行勾选或全选,一键 docker rmi 多个镜像;悬空 <none> 镜像自动按 ID 删除)config.json > cordis 行内 config┌──────────────────── DSH Web GUI(浏览器) ────────────────────┐
│ lib/client.js(纯 DOM,零依赖) │
│ 侧边栏「Docker」⇄ MCP / 容器 / 镜像 tab + 目标切换 + 终端 │
└──────────────────────────┬────────────────────────────────────┘
│ 同源 HTTP(loopback-only)
┌──────────────────────────▼────────────────────────────────────┐
│ DSH Host · lib/index.js │
│ McpGatewayBoardService:多目标分发 + MCP/Gateway + Docker 操作 │
│ GET /api/dsh-docker/{state,catalog} │
│ POST /api/dsh-docker/{action,shell/*} │
│ 配置 ~/.dsh/dsh-docker/config.json │
└──────────┬──────────────────────────────┬──────────────────────┘
│ local │ ssh(paramiko 常驻连接)
┌──────▼──────┐ ┌──────▼──────┐
│ 本机 docker │ │ 远端 Docker │ docker mcp profile/catalog/gateway
│ context │ │ Engine │ MCP servers in containers
└─────────────┘ └─────────────┘
| 模块 | 职责 |
|---|---|
lib/index.js | Host 入口:配置解析、服务挂载、系统提示注入 |
lib/host-service.js | 核心服务:多目标管理、MCP/Gateway 操作、Docker 容器/镜像操作、快照轮询 |
lib/host-routes.js | HTTP 路由(loopback-only):state / catalog / action / shell 系列端点 |
lib/client.js | 前端 UI:面板、目标切换、MCP/容器/镜像 tab、交互终端 |
lib/ssh-service.js | SSH 执行服务:spawn 常驻 ssh-exec.py,一行一 JSON 协议 |
lib/ssh-exec.py | paramiko 常驻 SSH 进程:命令执行 + PTY 交互终端 |
lib/local-exec.js | 本机 docker 执行:execFile + shell 风格命令解析(防注入) |
lib/local-db.js | 本机 ~/.docker/mcp/mcp-toolkit.db 的 working_set 读写(node:sqlite) |
lib/crypto-store.js | Windows DPAPI 凭据加密存储(ProtectedData·CurrentUser) |
scripts/wsl-docker-setup.sh | WSL2 Ubuntu 一键安装 Docker Engine + docker mcp(含清华镜像 fallback) |
# <repo-path> 为克隆/解压后的插件目录
dsh plugin --profile web add link:<repo-path>
dsh web
在 ~/.dsh/profiles/web/package.json 的 dependencies 增加:
"dsh-docker": "file:<repo-path>"
在 dsh.profile.bundles 数组追加 dsh-docker
在 ~/.dsh/profiles/web/cordis.patch.yml 保留:
- insert:
- id: dsh-docker
name: 'dsh-docker'
在 profile 目录执行 npm install,重启 dsh web
安装后侧边栏出现「Docker」入口,点击打开管理面板。
配置来源优先级:环境变量 > ~/.dsh/dsh-docker/config.json > cordis 行内 config
| 环境变量 | 说明 |
|---|---|
MCPGW_SSH_HOST | SSH 主机 |
MCPGW_SSH_PORT | SSH 端口(默认 22) |
MCPGW_SSH_USER | SSH 用户 |
MCPGW_SSH_PWD | SSH 密码(建议用 env,不写进 config.json) |
MCPGW_SSH_AUTH | 认证方式:password(默认)或 key |
MCPGW_SSH_KEY | 私钥路径(auth=key 时使用) |
MCPGW_SSH_PASSPHRASE | 私钥口令(可选) |
~/.dsh/dsh-docker/config.json,位于用户主目录、勿提交 git){
"pollIntervalMs": 8000,
"activeTargetId": "remote",
"targets": [
{
"id": "local",
"name": "本机 Docker",
"type": "local",
"dockerPath": ""
},
{
"id": "remote",
"name": "远端服务器",
"type": "ssh",
"ssh": {
"host": "203.0.113.10",
"port": 22,
"user": "root",
"auth": "password",
"password": "<DPAPI 密文,或留空用环境变量>"
}
}
]
}
旧版单
ssh配置会自动迁移为targets数组中的 SSH 目标。
docker exec -it <container> sh 交互式 shell(PTY)docker pull <image> 成功,再填镜像地址;gateway 以 --pull never 加载本地镜像--verify-signatures=false 解决镜像签名校验访问 Docker Hub CDN 被墙的问题)| 信息 | 存放位置 | 是否进入仓库 |
|---|---|---|
| SSH 主机/端口/用户名 | config.json(用户主目录)或环境变量 | ❌ |
| SSH 密码 | DPAPI 密文(仅当前用户可解密) | ❌ |
| 私钥路径/口令 | config.json | ❌ |
| 轮询间隔等非敏感配置 | config.json | ❌ |
config.json 已被 .gitignore 与 .npmignore 双重排除,从未也不会进入版本库203.0.113.10、root 等),不代表任何真实环境详见 SECURITY.md。
dsh-docker/
├── lib/
│ ├── index.js # Host 入口(配置解析、服务挂载)
│ ├── host-service.js # 核心服务(多目标、MCP、Gateway、Docker 操作)
│ ├── host-routes.js # HTTP 路由(loopback-only)
│ ├── client.js # 前端 UI(纯 DOM、免构建)
│ ├── ssh-service.js # SSH 执行服务(spawn python)
│ ├── ssh-exec.py # paramiko 常驻 SSH 进程(命令 + PTY)
│ ├── local-exec.js # 本机 docker 执行
│ ├── local-db.js # 本机 sqlite working_set 操作
│ └── crypto-store.js # DPAPI 凭据加密
├── scripts/
│ └── wsl-docker-setup.sh # WSL2 Docker 一键安装脚本
├── cordis.patch.yml # 插件注册 patch
├── package.json
├── README.md # 本文档(中文)
└── README.en.md # English documentation
lib/*.js,Host 侧改完重启 dsh web,Client 侧改完浏览器刷新(Ctrl+F5)node --check lib/*.jsdocker-mcp CLI 插件(~/.docker/cli-plugins/docker-mcp)export DOCKER_MCP_IN_CONTAINER=1(无 Docker Desktop 时)docker mcp feature enable profilesdocker mcp catalog pull mcp/docker-mcp-catalogparamiko(供 ssh-exec.py)