An out-of-the-box DSH Docker image. (https://github.com/yjrszcq/dsh-docker)
7.5K
English | 中文
An unofficial Docker image for DeepSeek Harness. It installs the official @deepseek-ai/dsh package and adds persistent updates, rollback, a server-authoritative local administrator system, configurable Management isolation, managed outbound proxy routing, recovery tools, and optional development utilities.
DeepSeek Harness is in Developer Preview and may introduce incompatible changes. This project is not affiliated with DeepSeek AI.
| Variant | Rolling tag | Versioned tag | Contents |
|---|---|---|---|
| Standard | latest | <version> | DSH and normal runtime utilities |
| Devtools | latest-devtools | <version>-devtools | Standard image plus development tools |
Both variants support linux/amd64 and linux/arm64.
Docker Hub tags follow the DSH version. ghcr.io/yjrszcq/dsh-docker mirrors only the Standard image with Environment version tags and dsh-<version> lookup tags; it does not publish Devtools images.
data/dsh, data/platform, and workspace must be writable by container UID/GID 1000:1000.data/dsh and data/platform when recreating or upgrading the container. They have different responsibilities and must not be merged.127.0.0.1:3080 and is accessible only from the Docker host. Publishing 3080:3080 exposes it on every host interface.DSH_TRUSTED_HOSTS to the exact browser-facing IP addresses or domains, initialize the local administrator account, and use HTTPS or another trusted network boundary.DSH_SUDO_ENABLED=true with repository Compose, add group_add: [dsh-sudo-true] to custom Compose, or add --group-add dsh-sudo-true to Docker Run. This does not restrict the standalone Management Console's root terminal or file manager./_dsh_platform/console/ remains available when DSH is stopped or cannot start. The first browser visit creates the local administrator account. Management uses a separate session derived from the DSH browser session, with optional Management password and TOTP two-factor authentication.Create the bind-mount directories:
mkdir -p data/dsh data/platform workspace
sudo chown -R 1000:1000 data workspace
Create docker-compose.yaml:
services:
deepseek-harness:
image: szcq/deepseek-harness:latest
container_name: deepseek-harness
restart: unless-stopped
ports:
- "127.0.0.1:3080:3080"
volumes:
- ./data/dsh:/data/dsh
- ./data/platform:/data/platform
- ./workspace:/workspace
Start the container:
docker compose up -d
Or use Docker Run:
docker run -d \
--name deepseek-harness \
--restart unless-stopped \
-p 127.0.0.1:3080:3080 \
-v "$(pwd)/data/dsh:/data/dsh" \
-v "$(pwd)/data/platform:/data/platform" \
-v "$(pwd)/workspace:/workspace" \
szcq/deepseek-harness:latest
Open http://127.0.0.1:3080.
The quick-start configuration does not grant DSH or its Agent passwordless root access.
| Container path | Purpose |
|---|---|
/data/dsh | DSH settings, credentials, sessions, profiles, and third-party plugins |
/data/platform | Platform state, trust records, verified assets, rollback data, snapshots, tasks, and logs |
/workspace | Default workspace |
Do not replace either data path with a new empty directory during an image upgrade. If a bind mount becomes inaccessible, fix its ownership and recreate the container:
sudo chown -R 1000:1000 data workspace
docker compose up -d --force-recreate
For LAN or reverse-proxy access, configure the browser-facing hosts:
services:
deepseek-harness:
image: szcq/deepseek-harness:latest
container_name: deepseek-harness
restart: unless-stopped
ports:
- "3080:3080"
environment:
DSH_TRUSTED_HOSTS: "192.168.1.100,dsh.example.com"
volumes:
- ./data/dsh:/data/dsh
- ./data/platform:/data/platform
- ./workspace:/workspace
Equivalent Docker Run command:
docker run -d \
--name deepseek-harness \
--restart unless-stopped \
-p 3080:3080 \
-e 'DSH_TRUSTED_HOSTS=192.168.1.100,dsh.example.com' \
-v "$(pwd)/data/dsh:/data/dsh" \
-v "$(pwd)/data/platform:/data/platform" \
-v "$(pwd)/workspace:/workspace" \
szcq/deepseek-harness:latest
DSH_TRUSTED_HOSTS accepts comma-separated hostnames or IP addresses without protocols or paths. A reverse proxy must preserve the original browser-facing Host header. Terminate HTTPS outside this container. After startup, open the browser-facing address and create the local administrator username and main password.
Common settings:
| Variable | Default | Purpose |
|---|---|---|
DSH_TRUSTED_HOSTS | Loopback only | Allowed browser-facing hosts |
DSH_DEFAULT_WORKSPACE | /workspace | Default workspace for directory pickers and standalone file management |
DSH_SUDO_ENABLED | false | Compose-only passwordless sudo switch for DSH and its Agent |
Open the standalone console at:
http://127.0.0.1:3080/_dsh_platform/console/
It runs independently of the DSH Runtime and provides:
Registration, login, password, recovery, and 2FA decisions are performed by the Access Manager backend; browser forms only transport input and display its result. A DSH login creates a DSH Session. Opening Management exchanges that active session once for a separate Management Session; direct Management access completes the main login first and then requests the optional Management password. Revoking a DSH Session also revokes its linked Management Session.
Authentication Settings lists and revokes browser sessions by device. Management supports compatibility, public separate-Origin, and local separate-Origin modes; DSH/Agent Root access locks it to compatibility mode. Backend password/TOTP backoff and rolling source/instance limits protect login endpoints.
An interactive Root console can recover credentials, retry limits, and sessions through dsh-platform access. Fresh registration needs no key; access generate-key is only for migration or damaged authentication state. Image-baseline recovery uses dsh-platform recover.
Both the standalone Management Console and Platform Management in DSH Settings can configure an existing HTTP or SOCKS5 proxy. DSH Docker uses the configured endpoint for selected outbound traffic; it does not create or expose another public proxy service.
Proxy routing is disabled by default. Updates, platform components, DSH, plugins, Agent operations, the console terminal, and identifiable model Providers can be selected independently. Disabled scopes and local platform communication remain direct. Authentication, SOCKS5 DNS modes, direct rules, and connection tests are supported; passwords are write-only and excluded from logs.
When the external proxy runs on the Docker host, 127.0.0.1 inside the container refers to the container itself. Use the actual Docker bridge gateway address and ensure the host proxy listens on that address. The gateway is often 172.17.0.1 on the default bridge, but it must be checked rather than hard-coded.
Open Platform Management in DSH Settings or use the standalone DSH Management Console. Checking does not automatically download or activate an update; activation always requires explicit confirmation.
Persistent journals recover interrupted work. Both interfaces restore task stages and scoped logs after refresh; measurable work reports real byte, file, Artifact, item, or service progress. Rollback and return-to-Stable are available only in the standalone console.
Useful commands:
docker exec deepseek-harness dsh-platform status
docker exec deepseek-harness dsh-platform check
docker exec deepseek-harness dsh-platform update --wait
docker exec deepseek-harness dsh-platform stop --wait
docker exec deepseek-harness dsh-platform start --wait
docker exec deepseek-harness dsh-platform restart --wait
docker exec deepseek-harness dsh-platform rollback
Lifecycle commands control only dsh-runtime; Bootstrap, Gateway, Management, and the container remain running. The standalone Management Console therefore stays available while DSH is stopped, restarting, recovering, or unable to start.
Bootstrap prevents duplicate unsupervised Web instances and retries unexpected exits up to three times before recovery mode. Gateway displays localized holding or recovery pages during known transitions and returns structured 503 responses to API/WebSocket clients; unclassified proxy failures remain 502.
| Plugin | Purpose |
|---|---|
@dsh-docker/platform-management | Adds outbound proxy settings, updates, maintenance, logs, System Plugin, System Skill, and current-browser sign-out controls to DSH Settings |
@dsh-docker/settings-document-editor | Replaces desktop-only configuration-file opening with an optional browser editor |
@dsh-docker/settings-navigation | Keeps the desktop Settings directory independently scrollable and provides directory/detail navigation on narrow screens |
Bundled plugins are restored from verified local Environment assets. Platform Management and the editor use the authenticated DSH Session through a restricted DSH-side API and do not require a Management Session. Account credentials and complete authentication settings remain available only in the standalone Management Console or Root CLI. Disabling Settings Navigation restores the original DSH Settings layout.
The verified Bootstrap includes dsh-docker-operations, an Agent guide for container development, plugins, lifecycle, updates, recovery, networking, and diagnostics; invoke it as /dsh-docker-operations. The console manages bundled System Skills and native User Skills. Skill selection hot-loads without restarting DSH and does not modify project-level Skills.
An authenticated DSH Session has full DSH authority. A Management Session additionally grants root terminal and file operations. Use strong credentials, HTTPS, firewall rules, and a trusted network boundary for remote access.
Repository Compose disables DSH/Agent passwordless sudo by default. Do not combine sudo with privileged mode, the Docker socket, or sensitive host mounts unless you understand that this can grant control of the Docker host.
English | 中文
面向 DeepSeek Harness 的非官方 Docker 镜像。镜像安装官方 @deepseek-ai/dsh 包,并提供持久化更新、回滚、后端统一认证的本地管理员、可配置管理入口、受管出站代理、恢复工具和可选开发工具。
DeepSeek Harness 目前处于 Developer Preview,可能出现不兼容变更。本项目不隶属于 DeepSeek AI。
| 变体 | 滚动标签 | 版本标签 | 内容 |
|---|---|---|---|
| 标准版 | latest | <version> | DSH 与正常运行工具 |
| 开发工具版 | latest-devtools | <version>-devtools | 标准版及开发工具 |
两个变体均支持 linux/amd64 和 linux/arm64。
Docker Hub 标签跟随 DSH 版本。ghcr.io/yjrszcq/dsh-docker 只镜像标准版,使用 Environment 版本标签和 dsh-<version> 查询标签,不发布 Devtools 镜像。
data/dsh、data/platform 和 workspace 必须允许容器 UID/GID 1000:1000 写入。data/dsh 和 data/platform。两者职责不同,不能合并。127.0.0.1:3080,只能从 Docker 宿主机访问。发布为 3080:3080 会在宿主机所有网络接口上暴露服务。DSH_TRUSTED_HOSTS、初始化本地管理员,并使用 HTTPS 或其他可信网络边界。DSH_SUDO_ENABLED=true、自定义 Compose 的 group_add: [dsh-sudo-true] 或 Docker Run 的 --group-add dsh-sudo-true 开启。该设置不限制独立管理中心的 Root 终端和文件管理。/_dsh_platform/console/ 在 DSH 停止或无法启动时仍可使用。首次访问创建本地管理员;管理中心使用由 DSH 浏览器会话派生的独立会话,并支持管理中心密码和 TOTP 两步验证。创建绑定挂载目录:
mkdir -p data/dsh data/platform workspace
sudo chown -R 1000:1000 data workspace
创建 docker-compose.yaml:
services:
deepseek-harness:
image: szcq/deepseek-harness:latest
container_name: deepseek-harness
restart: unless-stopped
ports:
- "127.0.0.1:3080:3080"
volumes:
- ./data/dsh:/data/dsh
- ./data/platform:/data/platform
- ./workspace:/workspace
启动容器:
docker compose up -d
也可以使用 Docker Run:
docker run -d \
--name deepseek-harness \
--restart unless-stopped \
-p 127.0.0.1:3080:3080 \
-v "$(pwd)/data/dsh:/data/dsh" \
-v "$(pwd)/data/platform:/data/platform" \
-v "$(pwd)/workspace:/workspace" \
szcq/deepseek-harness:latest
快速开始配置不会向 DSH 或 Agent 授予免密码 Root 权限。
| 容器路径 | 用途 |
|---|---|
/data/dsh | DSH 设置、凭据、会话、Profile 和第三方插件 |
/data/platform | 平台状态、信任记录、可信资产、回滚数据、快照、任务和日志 |
/workspace | 默认工作区 |
升级镜像时,不要使用新的空目录替换任一数据路径。绑定挂载无法访问时,请修正所有权并重新创建容器:
sudo chown -R 1000:1000 data workspace
docker compose up -d --force-recreate
通过局域网或反向代理访问时,请设置浏览器实际使用的 Host:
services:
deepseek-harness:
image: szcq/deepseek-harness:latest
container_name: deepseek-harness
restart: unless-stopped
ports:
- "3080:3080"
environment:
DSH_TRUSTED_HOSTS: "192.168.1.100,dsh.example.com"
volumes:
- ./data/dsh:/data/dsh
- ./data/platform:/data/platform
- ./workspace:/workspace
对应的 Docker Run 命令:
docker run -d \
--name deepseek-harness \
--restart unless-stopped \
-p 3080:3080 \
-e 'DSH_TRUSTED_HOSTS=192.168.1.100,dsh.example.com' \
-v "$(pwd)/data/dsh:/data/dsh" \
-v "$(pwd)/data/platform:/data/platform" \
-v "$(pwd)/workspace:/workspace" \
szcq/deepseek-harness:latest
DSH_TRUSTED_HOSTS 接受不带协议或路径的逗号分隔主机名或 IP 地址。反向代理必须保留浏览器访问时使用的原始 Host 请求头,HTTPS 应在容器外终止。启动后打开浏览器地址并创建本地管理员用户名和主密码。
常用设置:
| 变量 | 默认值 | 用途 |
|---|---|---|
DSH_TRUSTED_HOSTS | 仅 loopback | 浏览器侧允许的主机 |
DSH_DEFAULT_WORKSPACE | /workspace | 目录选择器和独立文件管理的默认工作目录 |
DSH_SUDO_ENABLED | false | 仅供 Compose 使用的 DSH/Agent 免密码 sudo 开关 |
独立管理中心地址:
http://127.0.0.1:3080/_dsh_platform/console/
它独立于 DSH Runtime 运行,提供:
注册、登录、密码、恢复和 2FA 判断均由 Access Manager 后端完成,浏览器表单只传输输入和展示结果。登录 DSH 创建 DSH Session;进入管理中心时从有效会话一次性交接为独立 Management Session。直接访问管理中心会先完成主密码登录,再按配置验证管理中心密码。撤销 DSH Session 会同时撤销关联的 Management Session。
认证设置按设备列出并注销浏览器会话。管理中心支持兼容、公开独立 Origin 和本机独立 Origin;启用 DSH/Agent Root 后锁定为兼容模式。后端密码/TOTP 退避及来源和实例滚动限额用于保护登录入口。
交互式 Root 终端可通过 dsh-platform access 恢复凭据、重试限额和会话。全新注册无需密钥;access generate-key 仅用于迁移或认证损坏。镜像基线恢复使用 dsh-platform recover。
独立管理中心和 DSH 设置中的“平台管理”都可以配置已有的 HTTP 或 SOCKS5 代理。DSH Docker 只会让选定的出站流量使用该代理,不会创建或对外开放另一个公共代理服务。
代理默认关闭。更新、平台组件、DSH、插件、Agent、管理终端和可识别模型 Provider 可以独立选择代理;关闭的范围及平台本地通信保持直连。支持认证、SOCKS5 DNS、直连规则和连接测试;密码只写且不进入日志。
外部代理运行在 Docker 宿主机时,容器内的 127.0.0.1 指向容器自身。请使用实际 Docker bridge 网关地址,并确保宿主代理监听该地址。默认 bridge 常见地址是 172.17.0.1,但必须根据实际网络确认,不能硬编码。
在 DSH 设置中打开“平台管理”,或使用独立的“DSH 管理中心”。检查更新不会自动下载或激活任何内容;激活始终需要用户明确确认。
持久化 journal 会恢复中断事务。两套界面刷新后均可恢复任务阶段和关联日志;可测量操作显示真实字节、文件、Artifact、项目或服务进度。普通回滚和返回 Stable 只在独立管理中心提供。
常用命令:
docker exec deepseek-harness dsh-platform status
docker exec deepseek-harness dsh-platform check
docker exec deepseek-harness dsh-platform update --wait
docker exec deepseek-harness dsh-platform stop --wait
docker exec deepseek-harness dsh-platform start --wait
docker exec deepseek-harness dsh-platform restart --wait
docker exec deepseek-harness dsh-platform rollback
生命周期命令只控制 dsh-runtime;Bootstrap、Gateway、Management 和容器保持运行。因此,DSH 停止、重启、恢复或无法启动时,独立管理中心仍然可以使用。
Bootstrap 会阻止重复的非托管 Web 实例,并对意外退出最多恢复三次。已知切换期间,Gateway 显示本地化等待或恢复页,并向 API/WebSocket 返回结构化 503;未分类代理故障仍保留 502。
| 插件 | 用途 |
|---|---|
@dsh-docker/platform-management | 在 DSH 设置中增加出站代理、更新、运行维护、日志、系统插件、系统技能和当前浏览器注销控制 |
@dsh-docker/settings-document-editor | 将仅适用于桌面的配置文件打开操作替换为可选的浏览器编辑器 |
@dsh-docker/settings-navigation | 让桌面设置目录独立滚动,并在窄屏提供目录页与详情页导航 |
系统插件从经过验证的本地 Environment 资产恢复。“平台管理”和编辑器通过已认证的 DSH Session 使用受限 DSH 侧接口,不需要 Management Session。账户凭据和完整认证设置仅在独立管理中心或 Root CLI 中提供。禁用“设置导航”会恢复原始 DSH Settings 布局。
经过验证的 Bootstrap 包含 dsh-docker-operations,为 Agent 提供开发、插件、生命周期、更新、恢复、网络和诊断指引,可显式调用 /dsh-docker-operations。管理中心可管理系统技能和原生用户技能;选择变更会热加载,且不会修改项目级 Skill。
已认证的 DSH Session 拥有完整 DSH 权限;Management Session 还可使用 Root 终端和文件操作。远程访问时请使用强凭据、HTTPS、防火墙和可信网络边界。
仓库 Compose 默认关闭 DSH/Agent 免密码 sudo。除非清楚影响,否则不要同时使用 sudo、Privileged Mode、Docker Socket 或敏感宿主机挂载;这些能力可能授予 Docker 宿主机控制权。
Content type
Image
Digest
sha256:f1c4dcd52…
Size
327.7 MB
Last updated
5 days ago
docker pull szcq/deepseek-harness