首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >想要更轻的 Docker 管理面板?用 Dockhand 管飞牛 NAS 上的容器与 Compose

想要更轻的 Docker 管理面板?用 Dockhand 管飞牛 NAS 上的容器与 Compose

作者头像
fruge365
发布于 2026-09-20 08:07:30
发布于 2026-09-20 08:07:30
1340
举报

想要更轻的 Docker 管理面板?用 Dockhand 管飞牛 NAS 上的容器与 Compose

前言

NAS 上的 Docker 服务一多,我最怕的不是“不会敲命令”,而是每次想看个日志、进一次容器、确认某个 Compose 项目状态,都要来回切终端、找目录。Portainer 当然成熟,但如果日常主要就是管理容器、镜像、网络、卷和 Stack,我更愿意试试一个界面更轻、路径更直接的工具。Dockhand 正好属于这一类:它本身用 Docker 部署,通过浏览器就能查看容器状态、实时日志、网页 Shell、Compose 堆栈、镜像、数据卷和网络。

这次我把它装在飞牛 NAS 上,使用 fnsys/dockhand:latest,把外部端口映射到 33334。部署完成后,先导入当前 Docker 环境,确认现有容器会自动同步到面板里,再实际查看日志、进入容器 Shell、检查 Stacks、Images、Volumes、Networks、Templates 和 Activity。等本地管理没问题以后,再用 cpolar 把 33334 页面提供到公网,先跑随机地址,再切到固定二级子域名。对我来说,这种工具最重要的不是功能列表写得多长,而是日常几次点击能不能替掉那些反复的终端切换;同时,网页管理也不能把底层 Docker 关系藏掉,端口、Socket、Volume 和 Stack 状态仍然得看得清楚。尤其是 NAS 这种长期运行设备,管理入口越简单,后面维护多个服务时越省心。这样 Dockhand 负责 Docker 管理,cpolar 只负责远程入口,出了问题也知道该查哪一层。

1. Dockhand 更适合哪类 Docker 使用场景?

Dockhand 是一款开源、自托管的 Docker Web 管理面板,重点放在容器、镜像、网络、数据卷和 Compose 项目的可视化管理。

它的定位比较明确:

  • 容器启停与状态查看;
  • 实时日志;
  • 网页 Shell;
  • 容器文件浏览;
  • Compose Stack 管理;
  • 镜像、数据卷、网络管理;
  • 多 Docker 环境接入;
  • Activity 操作事件查看;
  • 应用模板。

Dockhand 的定位还包括 SQLite 本地存储、OIDC-SSO、GitOps、镜像漏洞扫描、自动更新和多主机管理等能力。

不过日常用起来,最先值得验证的还是:能不能把现有 Docker 环境接进来,能不能看容器、看日志、进 Shell、看 Stack 和资源对象。

至于“资源占用极低”“比 Portainer 更轻”这类描述,没有实际 CPU、内存占用对比数据时,更适合把它看作产品定位,而不是已经完成的性能测量结论。

2. 部署前先确认飞牛的 SSH 和 Docker

2.1 开启 SSH

先在飞牛设置里开启 SSH 服务。

463c5f2aa280d7887420494b8b8f852e
463c5f2aa280d7887420494b8b8f852e
27abe7f94baeaebc1738b60b1ba78933
27abe7f94baeaebc1738b60b1ba78933

然后通过终端登录飞牛。

e16c7480a399e50f627439329422c5a7
e16c7480a399e50f627439329422c5a7

后面的目录创建、Compose 启动和状态检查都需要在终端里完成。

2.2 检查 Docker

执行:

代码语言:javascript
复制
docker -v 
systemctl status -v

也可以直接在飞牛主页查看 Docker 状态。

bc2a0952beed8ca143a171bb000b2b23
bc2a0952beed8ca143a171bb000b2b23

确认 Docker 已经正常运行以后,再继续 Dockhand 部署。

3. 创建 Dockhand 目录

先创建安装目录并进入:

代码语言:javascript
复制
mkdir -p /docker/Dockhand
cd /docker/Dockhand
image-20260811170537295
image-20260811170537295

这次使用的路径是:

/docker/Dockhand

后面的 docker-compose.yml 就放在这里。

4. 写入 Docker Compose 配置

创建并编辑:

代码语言:javascript
复制
vi docker-compose.yml

services:
  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    ports:
      - 33334:3000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data   
volumes:
  dockhand_data:
image-20260811170600268
image-20260811170600268

这份配置里几个关键项需要记住:

  • 镜像:fnsys/dockhand:latest
  • 容器名:dockhand
  • 重启策略:unless-stopped
  • 外部端口:33334
  • 容器端口:3000
  • Docker Socket:/var/run/docker.sock:/var/run/docker.sock
  • 数据卷:dockhand_data:/app/data

其中最重要的映射关系是:

33334:3000

也就是说,Dockhand 容器内服务跑在 3000,外部通过 33334 访问。

5. 启动 Dockhand

执行:

代码语言:javascript
复制
docker compose up -d
image-20260811170629331
image-20260811170629331

然后检查容器状态:

代码语言:javascript
复制
docker ps
image-20260811170659140
image-20260811170659140

容器正常运行以后,就可以继续打开 Web 页面。

6. 先确认本地页面能打开

页面访问说明里写的是:

http://飞牛IP:

而 Compose 实际映射使用的是:

33334:3000

所以复现时应以当前实际映射端口为准。

788a4a348299f21c97c36200a7215a0c
788a4a348299f21c97c36200a7215a0c

能看到 Dockhand 页面以后,才说明 Web 服务这一层已经启动。

7. 进入 Dockhand 主页面

进入主页面后,可以看到当前管理界面。

54c941a20b8831ba6906d59e11562e0b
54c941a20b8831ba6906d59e11562e0b
image-20260811170931215
image-20260811170931215

我更关心的不是首页长什么样,而是现有 Docker 环境能不能真正接进来。

8. 添加 Docker 环境

进入添加环境页面。

image-20260811171036113
image-20260811171036113

点击添加环境。

image-20260811171102138
image-20260811171102138

按照当前页面配置。

image-20260811171828902
image-20260811171828902

添加完成。

image-20260811171850037
image-20260811171850037

环境识别成功。

image-20260811171902895
image-20260811171902895

随后当前 Docker 容器会同步到这个环境里。

image-20260811171921445
image-20260811171921445

这一层验证的是:

Dockhand → 当前 Docker 环境 → 现有容器自动显示。

不是安装完面板就结束,而是它已经开始读取当前 Docker 运行状态。

9. 直接在网页里看实时日志

进入容器后,可以直接查看实时运行日志。

这里展示的是 noco 容器。

image-20260811172141611
image-20260811172141611

对日常排错来说,这比反复执行 docker logs 更直观,尤其是容器多的时候,不需要先记住完整容器名再回终端查。

10. 直接进入容器 Shell

Dockhand 还提供网页 Shell。

选择 noco 容器进行测试。

image-20260811172406653
image-20260811172406653

进入成功。

image-20260811172526807
image-20260811172526807

这意味着一些临时检查和简单命令,可以直接从浏览器进入容器,不必每次重新 SSH 到服务器再执行 docker exec。

不过它替代的是高频操作入口,不代表 SSH 从此没有价值。涉及宿主机维护、文件系统、网络或更复杂排错时,终端依旧很重要。

11. Stacks 页面看 Compose 项目状态

Stacks 页面用于管理 Docker Compose 项目。

image-20260811172636193
image-20260811172636193

当前页面里几种状态含义是:

  • running:堆栈正常运行;
  • stopped:堆栈已经停止;
  • partial:部分容器正常、部分异常;
  • Untracked:Compose 项目不是通过 Dockhand 创建或导入,属于外部启动的堆栈。

这类状态对我很有用,因为不用先进入每个项目目录,就能快速判断哪些 Stack 需要重点检查。

12. Images:统一看 Docker 镜像

Images 页面用来查看和管理本机镜像。

image-20260811172658673
image-20260811172658673

原本需要用:

docker images

查看的内容,现在可以直接在网页里处理。

13. Volumes:查看持久化数据卷

Volumes 页面展示 Docker 数据卷。

image-20260811172920157
image-20260811172920157

这次页面里显示本机共有 7 个 Docker Volume。

数据卷往往和容器本身分开存在,所以做删除、迁移或排错时,能单独看到它们会更清楚。

14. Networks:集中查看 Docker 网络

Networks 页面负责 Docker 网络管理。

image-20260811172957169
image-20260811172957169

当前页面显示本机共有 12 个 Docker 网络。

这类信息平时用命令当然也能查,但服务一多以后,图形化查看网络对象会更容易快速建立整体关系。

15. Templates:应用模板市场

Dockhand 还提供 Templates 页面。

image-20260811173014639
image-20260811173014639

当前页面显示:

866

套社区模板。

模板可以减少手写 Compose 的工作量,但真正部署前仍然需要看清楚每个模板的端口、卷、环境变量和数据目录,不能因为“一键部署”就跳过这些基本检查。

16. Activity:用事件记录排查反复重启

Activity 页面记录容器启停、退出等操作事件。

image-20260811173030481
image-20260811173030481

图里可以看到 outline 容器反复启动、退出,退出码是:

1

这类页面对排查“容器为什么一直重启”很实用,因为先能看到事件,再决定是不是继续追日志。

17. 本地管理跑通以后,再处理公网访问

到这里,Dockhand 已经能做几件很实用的事:

接入 Docker 环境 → 自动同步容器 → 看日志 → 进 Shell → 看 Stack → 看镜像 / 卷 / 网络 → 看活动记录。

如果只在家里局域网使用,33334 已经够用。

如果人不在家,还想打开 Dockhand 管理页面,就再加公网入口。

这里 cpolar 只负责:

把 Dockhand 的 33334 Web 页面映射到公网。

它不会自动把 NocoDB、Outline 等其他容器一起全部映射出去;如果要远程访问那些服务,仍然需要为对应服务单独配置公网入口。

18. 安装 cpolar

执行:

代码语言:javascript
复制
sudo curl https://get.cpolar.sh | sh
image-20250725104019896
image-20250725104019896

安装完成后检查服务:

代码语言:javascript
复制
sudo systemctl status cpolar
22e5adfaf290a17fc3384bb296055259
22e5adfaf290a17fc3384bb296055259

服务启动以后,通过主机 IP + 9200 访问 cpolar Web 管理页面。

这里同时出现:

http://ip:9200

以及:

http://localhost:9200/

两种写法。实际访问时,以当前设备真正能打开的管理地址为准。

8a6698b1bf26d64ba3645827fbfb1c29
8a6698b1bf26d64ba3645827fbfb1c29

19. 先用随机域名验证 33334

进入【隧道管理 → 创建隧道】,配置为:

  • 隧道名称:dockehand
  • 协议:http
  • 本地地址:33334
  • 域名类型:随机域名
  • 地区:China Top
image-20260811173505070
image-20260811173505070

这里隧道名称使用的是:

dockehand

不是 dockhand。

这个名称只是当前示例中的隧道名,后面固定子域名也继续沿用同样写法。

创建完成以后,在在线隧道列表里查看公网地址。

image-20260811173537310
image-20260811173537310

从其他设备访问。

image-20260811173555493
image-20260811173555493

Dockhand 页面可以正常打开。

这一步确认的是:

Dockhand 33334 → cpolar 随机公网地址 → 外部浏览器访问成功。

20. 长期使用再换固定二级子域名

如果准备长期远程管理,再配置固定二级子域名。

进入预留功能。

image-20250918151358733
image-20250918151358733

地区选择:

china Top

这次使用的名称是:

dockehand

image-20260811173705704
image-20260811173705704

保留完成以后,回到【隧道管理 → 隧道列表】,找到对应隧道并编辑。

image-20260811173723849
image-20260811173723849

修改为:

  • 域名类型:二级子域名
  • Sub Domain:填写已经保留的名称
  • 地区:China Top

点击更新。

image-20260811173748514
image-20260811173748514

更新以后,在线隧道列表里的地址会切换成固定二级子域名。

image-20260811173801749
image-20260811173801749

最后再通过固定地址访问。

image-20260811173818240
image-20260811173818240

页面可以正常打开。

总结

Dockhand 最适合我的地方,不是“从此再也不用命令行”,而是把 Docker 日常最常碰到的几件事集中到一个页面:容器状态、日志、Shell、Stacks、镜像、数据卷、网络和 Activity 都能直接看,现有 Docker 环境也可以接进来。

这次实际跑通的链路是:

飞牛 SSH → Docker → /docker/Dockhand → fnsys/dockhand:latest → 33334:3000 → 添加 Docker 环境 → 自动同步容器 → 日志 / Shell / Stacks / Images / Volumes / Networks / Templates / Activity → cpolar → 随机公网地址 → 固定二级子域名 dockehand。

几个技术细节值得单独记住:

  • 安装目录:/docker/Dockhand
  • 镜像:fnsys/dockhand:latest
  • 容器名:dockhand
  • 外部端口:33334
  • 容器端口:3000
  • Docker Socket:/var/run/docker.sock
  • 数据卷:dockhand_data:/app/data
  • cpolar 管理端口:9200
  • 隧道名称:dockehand
  • 地区:China Top / china Top
  • 固定二级子域名:dockehand

如果你的 NAS 上已经跑着不少容器,而日常最常做的就是看状态、查日志、进容器和管理 Compose,Dockhand 这种“功能够用、入口集中”的思路会比较顺手。至于它到底比 Portainer 省多少资源,没有做实际占用对比时不必先下结论,先看它的管理方式是不是更适合自己的使用习惯。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 想要更轻的 Docker 管理面板?用 Dockhand 管飞牛 NAS 上的容器与 Compose
    • 前言
    • 1. Dockhand 更适合哪类 Docker 使用场景?
    • 2. 部署前先确认飞牛的 SSH 和 Docker
      • 2.1 开启 SSH
      • 2.2 检查 Docker
    • 3. 创建 Dockhand 目录
    • 4. 写入 Docker Compose 配置
    • 5. 启动 Dockhand
    • 6. 先确认本地页面能打开
    • 7. 进入 Dockhand 主页面
    • 8. 添加 Docker 环境
    • 9. 直接在网页里看实时日志
    • 10. 直接进入容器 Shell
    • 11. Stacks 页面看 Compose 项目状态
    • 12. Images:统一看 Docker 镜像
    • 13. Volumes:查看持久化数据卷
    • 14. Networks:集中查看 Docker 网络
    • 15. Templates:应用模板市场
    • 16. Activity:用事件记录排查反复重启
    • 17. 本地管理跑通以后,再处理公网访问
    • 18. 安装 cpolar
    • 19. 先用随机域名验证 33334
    • 20. 长期使用再换固定二级子域名
    • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档