内容提要
DeepSeek Harness 因安全限制禁止监听 0.0.0.0,在容器中运行需变通。作者通过 Dockerfile 安装 socat,将容器 8080 端口转发至内部 127.0.0.1:3080,再用 compose 映射到宿主机 127.0.0.1:3080,仅本机可访问。挂载配置与工作目录后执行 docker compose up,打开日志中带 token 的链接即可使用 Web UI。
延伸解读
为什么需要 socat 转发
DeepSeek Harness 出于安全考虑禁止监听 0.0.0.0,只绑定容器内的 127.0.0.1:3080。这意味着容器外部无法直接访问该端口。作者用 socat 将容器的 8080 端口转发到 127.0.0.1:3080,从而绕过限制,使服务可通过 Docker 端口映射暴露给宿主机。
仅本机访问的安全设计
compose 中将端口映射为 127.0.0.1:3080:8080,因此服务只绑定在宿主机的回环地址上,局域网内其他设备无法访问。这延续了 DSH 默认不对外暴露的安全思路,适合本地开发或测试场景,避免意外将 AI Agent 服务开放给外部网络。
挂载目录与持久化
运行前需创建 dsh_home 和 workspace 两个目录,分别挂载到容器的 /root/.dsh 和 /workspace。前者保存 DSH 的配置和状态,后者是工作目录。这样容器重建后配置和数据不会丢失,也方便在宿主机上直接查看或修改工作文件。
启动与访问方式
执行 docker compose up 后,等待服务启动完成,日志中会输出一个带 token 的链接。复制该链接在浏览器打开即可访问 Web UI。token 用于身份验证,不要随意分享。整个过程无需额外配置,适合快速在容器中试用 DeepSeek Harness。
Q&A
为什么 DeepSeek Harness 在容器中运行需要特殊配置?
因为 DSH 出于安全考虑禁止监听 0.0.0.0,只监听容器内的 127.0.0.1:3080,导致容器外部无法直接访问,所以需要变通方法。
如何在 Docker 中让 DeepSeek Harness 的 Web UI 可以被宿主机访问?
使用 socat 将容器的 8080 端口转发到内部的 127.0.0.1:3080,再通过 Docker Compose 将宿主机端口映射到容器的 8080 端口。
运行 DeepSeek Harness 容器需要哪些关键配置?
需要编写 Dockerfile 安装 socat 和 DSH,并设置启动命令;编写 compose.yml 映射端口和挂载卷;创建 dsh_home 和 workspace 目录用于挂载。
如何确保 DeepSeek Harness 服务不暴露到局域网?
在 compose.yml 中将端口绑定到宿主机的 127.0.0.1:3080,这样只能从本机访问,不会暴露到局域网。
启动 DeepSeek Harness 容器后如何访问 Web UI?
运行 docker compose up 启动服务,等服务启动完成后,打开日志中输出的带 token 的链接即可看到 Web UI。
DeepSeek Harness 容器需要挂载哪些目录?
需要挂载两个目录:./dsh_home 到 /root/.dsh 用于配置,./workspace 到 /workspace 用于工作目录。