Dockhand:现代化 Docker 容器管理面板,Web 界面管理 Compose 堆栈

2026-06-04

背景

管理 Docker 容器,大部分时候靠命令行就够了。docker ps、docker logs、docker compose up -d,熟记这几个命令就能应付日常。但容器数量一多,或者要频繁查看日志、重启服务、修改配置,每次 SSH 上去敲命令就变得很烦。

这个时候需要 Docker 管理面板。

Portainer 是同类中最知名的选择(20k+ Star),但它的 CE 版功能有限——OIDC/SSO 要买 Business 版,不支持 Git 仓库部署,也没有漏洞扫描。如果你只需要一个简单面板,Portainer 够用。如果你想要更多,可以看看 Dockhand。

Dockhand 是什么

Dockhand 是一个开源的 Docker 管理面板(BSL 1.1 许可证,个人和内部使用免费),用 Web 界面替代 docker CLI 完成日常操作。开发者是 Finsys,默认端口 3424,部署起来大概 30 秒。

核心功能分几块:

容器管理 — 启动、停止、删除容器,查看进程和环境变量,交互式 Web 终端(不用 SSH),文件浏览器。这些大部分面板都有,没什么特别的。

Compose 堆栈管理 — 这是它的强项。内置可视化 Compose 编辑器,不用手写 YAML;支持从 Git 仓库部署堆栈,配置 Webhook 后 push 即部署;还能从其他容器管理器「收养」已有的 Compose 堆栈。

多环境管理 — 支持本地 Unix Socket 和远程 TCP 连接(TLS 加密)。它还带一个叫 Hawser 的代理组件,可以穿透 NAT/防火墙,不需要暴露 Docker API 端口就能管理远程机器。

安全相关 — OIDC/SSO 免费版就有(Portainer 要 Business 版才给)。支持多因素认证(TOTP)。还有一个实用的功能叫”安全拉取”:新镜像先拉到临时标签,用 Grype/Trivy 扫描 CVE,通过后再覆盖运行容器。

零遥测 — 没有使用跟踪、没有分析、没有后台连接。这一点对注重隐私的人比较重要。

快速部署

Docker CLI(最快)

docker run -d \
  --name dockhand \
  --restart unless-stopped \
  -p 3424:3000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v dockhand_data:/app/data \
  fnsys/dockhand:latest

启动后访问 http://你的IP:3424

Docker Compose(推荐)

大部分人用 Compose 更合适,方便管理:

version: '3.8'
services:
  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    ports:
      - "3424:3000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data
volumes:
  dockhand_data:

默认用 SQLite 存储数据。如果要上生产环境,建议换成 PostgreSQL:

version: '3.8'
services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: dockhand
      POSTGRES_PASSWORD: changeme
      POSTGRES_DB: dockhand
    volumes:
      - postgres_data:/var/lib/postgresql/data
  dockhand:
    image: fnsys/dockhand:latest
    ports:
      - "3424:3000"
    environment:
      DATABASE_URL: postgres://dockhand:***@postgres:5432/dockhand
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data
    depends_on:
      - postgres
    restart: unless-stopped
volumes:
  postgres_data:
  dockhand_data:

首次启动

装好之后第一次打开,认证默认是关闭的。需要先去 Settings > Authentication 启用认证,创建管理员用户。这一步很容易忘,我第一次装完直接就能操作,还以为是 Bug,后来发现是设计如此。

踩坑记录

1. Docker Socket 权限

Dockhand 默认以非 root 用户运行。如果直接绑定 /var/run/docker.sock 可能会遇到 permission denied

解决方案:找到宿主机 docker 组的 GID,然后通过 --group-add 传入。

# 查看宿主机 docker 组的 GID
stat -c '%g' /var/run/docker.sock

在 Compose 文件里加上 group_add 配置:

services:
  dockhand:
    # ...
    group_add:
      - "999"  # 替换为你的 docker 组 GID

更安全的做法是加一个 Docker Socket Proxy 做中间层,只暴露必要的 API 接口。

2. 认证默认未启用

如前面所说,第一次启动后直接就能访问所有功能,不需要登录。这不是漏洞,是设计——方便本地快速试用。但记得要去 Settings 开启认证。如果你部署在公网上,一定要先做这一步再暴露端口。

3. SQLite 切 PostgreSQL 不能自动迁移

如果用 SQLite 跑了一段时间再想切到 PostgreSQL,Dockhand 不会自动迁移数据。需要全新开始。所以如果一开始就打算长期用,建议直接上 PostgreSQL。

4. 防火墙避坑

Docker 会绕过 UFW,-p 3424:3000 会把端口暴露在 0.0.0.0 上。如果不打算从外网访问,建议绑定到本地地址:

-p 127.0.0.1:3424:3000

然后用反向代理(Traefik、Nginx、Caddy)加认证和 HTTPS。

5. NAS 上的磁盘用量采集

如果容器跑在 NAS 上,Dockhand 的磁盘用量采集(df 命令)在网络存储挂载点多的情况下可能会卡住。设置环境变量 SKIP_DF_COLLECTION=true 可以关掉这个功能。

和其他面板对比

功能 Dockhand(免费版) Portainer CE Dockge
Compose 可视化编辑
Git 仓库部署
Webhook 自动同步
多环境远程管理
OIDC/SSO 免费 ❌(Business)
漏洞扫描
零遥测
部署复杂度 极简(30秒) 简单 简单

Dockhand 免费版已经包含了 OIDC/SSO、漏洞扫描、Git 集成、多因素认证。Portainer 要把这些功能凑齐得买 Business 版(每个节点收费)。Dockge 更轻量但功能少很多,不支持远程管理,没有 Web 终端。

总结

Dockhand 适合两类人:一是觉得 Portainer 免费版功能不够用的人,二是想用 Git + Webhook 做自动化部署的人。

它的许可证是 BSL 1.1,个人和内部使用免费,2029 年会转 Apache 2.0,不用担心被锁定。部署也很简单,跑一个容器就行。

如果你是个人用,免费版的功能已经完全够了——无限环境、OIDC/SSO、漏洞扫描、Git 集成全都包含。商用的话可以根据规模选 SMB 或 Enterprise 版。

参考链接:官网 | GitHub | 官方手册