smanx/deepseek-harness Docker 镜像
开箱即用的DeepSeek Harness Docker镜像,内置Node反向代理,解决官方监听回环地址的限制,支持安全的局域网访问。
deepseek-harness(Docker 镜像)
镜像地址(默认):smanx/deepseek-harness:latest(Docker Hub)
镜像地址(备用):ghcr.io/smanx/deepseek-harness:latest(GitHub Container Registry,GHCR,所有 tag 同步推送)
Docker Hub 项目主页:https://hub.docker.com/r/smanx/deepseek-harness
一个开箱即用的 DeepSeek Harness(DSH) Docker 镜像,内置了 Node 反向代理,解决 DSH 官方不允许 --host 0.0.0.0、只能监听回环地址的问题,让 DSH 可以安全地通过局域网访问。
在线体验地址(Demo)
- 体验地址:[***]
- 登录账号 / 密码:
admin/admin
⚠️ 注意: 该地址为公开地址。如需填入你自己的 API Key(如 DeepSeek 等),请谨慎填写,以免 Key 泄露。
项目介绍
- DSH:容器内安装官方 npm 包
@deepseek-ai/dsh(https://github.com/deepseek-ai/deepseek-harness),默认监听容器内127.0.0.1:3079(源端口); - Node 代理:
0.0.0.0:3080(代理端口)→127.0.0.1:3079,对外提供 HTTP + WebSocket 转发; - 为什么需要代理:
- DSH 官方禁止
--host 0.0.0.0(安全限制),只能监听回环地址; - 局域网 IP 页面属于浏览器非安全上下文,DSH 前端依赖的
crypto.randomUUID不可用,代理在转发 HTML 时自动注入基于getRandomValues的 polyfill,否则实时通道(WS)会一直 pending; - 代理同时提供可选的 HTTP Basic Auth,给局域网访问加认证。
- DSH 官方禁止
快速开始(拉取运行)
bash# 1. 拉取镜像(默认从 Docker Hub 拉取) docker pull docker.xuanyuan.run/smanx/deepseek-harness:latest # 2. 启动(默认:代理对外端口 3080,数据持久化到命名卷 dsh-data) docker run -d \ --name dsh-harness \ -p 3080:3080 \ -v dsh-data:/root/.dsh \ --restart unless-stopped \ docker.xuanyuan.run/smanx/deepseek-harness:latest # 3. 访问 # 本机: http://127.0.0.1:3080/ # 局域网:http://<服务器局域网IP>:3080/
WebSocket 实时通道(/api/events.mux、/api/events.host)由代理自动转发,无需额外配置。
不同 tag 的区别
| tag | 定位 | 包含工具 |
|---|---|---|
latest | 精简运行镜像 | 无(仅 Node 运行时 + DSH + 反向代理) |
devtools-min-latest | 精简工具版,常用调试工具 | git、curl、wget、nano、jq、procps、ca-certificates、unzip |
devtools-latest | 完整工具版,可在容器内开发/编译 | 精简版全部 + vim、openssh-client、zip、htop、tmux、tree、openssl、python3、build-essential(make+g++)、bash-completion |
每个 tag 都有对应的版本号 tag:
latest↔<版本>、devtools-latest↔devtools-<版本>、devtools-min-latest↔devtools-min-<版本>。
简单示例:
bash# 场景一:只想在浏览器里跑 DSH,不做任何调试 → 用精简的 latest docker run -d \ --name dsh-harness \ -p 3080:3080 \ -v dsh-data:/root/.dsh \ --restart unless-stopped \ docker.xuanyuan.run/smanx/deepseek-harness:latest # 场景二:需要进容器排查问题(看日志、jq 处理 JSON、wget 抓包)→ 用 devtools-min-latest docker run -d \ --name dsh-harness \ -p 3080:3080 \ -v dsh-data:/root/.dsh \ --restart unless-stopped \ docker.xuanyuan.run/smanx/deepseek-harness:devtools-min-latest # 场景三:要在容器里开发/编译扩展或做较重的运维(vim、python3、make 等)→ 用 devtools-latest docker run -d \ --name dsh-harness \ -p 3080:3080 \ -v dsh-data:/root/.dsh \ --restart unless-stopped \ docker.xuanyuan.run/smanx/deepseek-harness:devtools-latest
三个 tag 的启动命令完全一样,只是把镜像名替换成对应的 tag 即可;latest 之外的工具版镜像会比精简版略大,按需选择。
备用镜像(GHCR)
如果从 Docker Hub 拉取受限(如网络问题),可以使用备用镜像(GitHub Container Registry,tag 与 Docker Hub 完全一致):
bash# 拉取 GHCR 上的镜像 docker pull ***-ghcr.xuanyuan.run/smanx/deepseek-harness:latest # 启动命令与默认镜像完全一样,只需替换镜像名 docker run -d \ --name dsh-harness \ -p 3080:3080 \ -v dsh-data:/root/.dsh \ --restart unless-stopped \ ***-ghcr.xuanyuan.run/smanx/deepseek-harness:latest
除镜像地址不同外,两个镜像的配置与使用方式完全一致,可互相替换。
配置(环境变量)
| 环境变量 | 含义 | 默认值 |
|---|---|---|
DSH_PORT | 源端口:DSH 在容器内监听(127.0.0.1) | 3079 |
PROXY_PORT | 代理端口:代理对外监听(局域网入口) | 3080 |
PROXY_USERNAME | Basic Auth 用户名(可选) | 未设置 |
PROXY_PASSWORD | Basic Auth 密码(可选) | 未设置 |
DSH_PORT与PROXY_PORT必须不同(同一端口只能被一个进程监听)。 修改PROXY_PORT时,-p端口映射要对应改成-p <宿主机端口>:<新代理端口>。
启用 Basic Auth
bashdocker run -d \ --name dsh-harness \ -p 3080:3080 \ -v dsh-data:/root/.dsh \ -e PROXY_USERNAME=yourname \ -e PROXY_PASSWORD=yourpass \ --restart unless-stopped \ docker.xuanyuan.run/smanx/deepseek-harness:latest
- 用户名和密码两个都设置才启用认证;只设置一个(或都不设置)则完全放行;
- 认证对 HTTP 和 WebSocket 都生效,未通过认证返回
401+WWW-Authenticate,浏览器会弹出认证框; - 公开静态资源
/manifest.webmanifest、/favicon.svg、/favicon.ico不参与认证(只含应用名/图标等非敏感数据)。浏览器抓取<link rel="manifest">时不会携带 Basic Auth 凭据,若强制认证,控制台会持续报/manifest.webmanifest401。
修改代理端口
bash# 例如代理对外用 3088 docker run -d \ --name dsh-harness \ -p 3088:3088 \ -v dsh-data:/root/.dsh \ -e PROXY_PORT=3088 \ --restart unless-stopped \ docker.xuanyuan.run/smanx/deepseek-harness:latest
数据持久化
DSH 的会话/配置数据保存在容器内 /root/.dsh,上面的命令用命名卷 dsh-data 持久化:
docker stop/start和容器删除后卷仍在,数据不丢;- 彻底清除数据:
docker volume rm dsh-data(先停容器)。
停止 / 重启 / 删除
bashdocker stop dsh-harness # 停止 docker start dsh-harness # 再次启动 docker logs -f dsh-harness # 查看日志 docker rm -f dsh-harness # 删除容器(卷中的数据保留)
联系作者 / 反馈
- 交流与 Bug 反馈:https://github.com/deepseek-ai/deepseek-harness/discussions/1762
smanx 命名空间的其他可用镜像:
smanx/deepseek-harness 镜像文档
镜像拉取方式
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
轩辕镜像加速拉取命令点我查看更多 deepseek-harness 镜像标签
DockerHub 原生拉取命令
用户好评
来自真实用户的反馈,见证轩辕镜像的优质服务
