DSH Toolbox

用 Docker 跑 DeepSeek Harness

DSH 没有官方镜像:用 node:24-slim 自己构建,装 @deepseek-ai/dsh,从 dsh web 映射 8080 端口。

DSH 要求 Node.js 24.9.0 或更高,所以基础镜像是 node:24-slim,不能用更老的 tag。剩下就是一次 npm 安装加一条命令。

唯一的坑在绑定地址:--host 拒绝通配地址,容器里写 --host 0.0.0.0 起不来。要在启动时解析容器自己的接口地址。

Dockerfile

会话存在 $DSH_HOME,默认 ~/.dsh——容器里就是 /root/.dsh。挂出来,否则每次重建都丢会话列表。

FROM node:24-slim
RUN npm install -g @deepseek-ai/dsh
WORKDIR /work
EXPOSE 8080
CMD ["sh", "-c", "dsh web --port 8080 --no-open --host $(hostname -i)"]

构建与运行

两个挂载:dsh-home 让会话跨次保留,当前目录挂成工作区,agent 就能看到你的项目。

docker build -t dsh-web .
docker run --rm -p 8080:8080 -v dsh-home:/root/.dsh -v "$PWD:/work" dsh-web

为什么不能用 --host 0.0.0.0

--host 只接受一个具体的本机 IPv4 或 IPv6 地址,通配地址会被拒绝。容器里的接口地址写命令时还不知道,所以传 $(hostname -i),让 shell 在启动时解析。

要 TLS 就挂上 PEM 证书链和私钥,再加 --tls-cert 与 --tls-key;这两个参数必须一起给。

常见问题

官方有 DeepSeek Harness 的 Docker 镜像吗?

我们核过的发布包里没有。这里的 Dockerfile 从 node:24-slim 构建,再从 npm 装 @deepseek-ai/dsh。

容器刚起来就退出?

多半是 host 参数:--host 0.0.0.0 被有意拒绝。用容器接口地址,或者像上面那样写 $(hostname -i)。

重建后会话还在吗?

挂了 /root/.dsh 卷就在,那是容器里的 $DSH_HOME;没挂就跟容器一起没了。