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

想要更轻的 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 服务。

然后通过终端登录飞牛。

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

2.2 检查 Docker

执行:

shell 复制代码
docker -v 
systemctl status -v

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

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

3. 创建 Dockhand 目录

先创建安装目录并进入:

shell 复制代码
mkdir -p /docker/Dockhand
cd /docker/Dockhand

这次使用的路径是:

/docker/Dockhand

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

4. 写入 Docker Compose 配置

创建并编辑:

shell 复制代码
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:

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

  • 镜像: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

执行:

shell 复制代码
docker compose up -d

然后检查容器状态:

shell 复制代码
docker ps

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

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

页面访问说明里写的是:

http://飞牛IP:

而 Compose 实际映射使用的是:

33334:3000

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

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

7. 进入 Dockhand 主页面

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

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

8. 添加 Docker 环境

进入添加环境页面。

点击添加环境。

按照当前页面配置。

添加完成。

环境识别成功。

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

这一层验证的是:

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

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

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

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

这里展示的是 noco 容器。

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

10. 直接进入容器 Shell

Dockhand 还提供网页 Shell。

选择 noco 容器进行测试。

进入成功。

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

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

11. Stacks 页面看 Compose 项目状态

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

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

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

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

12. Images:统一看 Docker 镜像

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

原本需要用:

docker images

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

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

Volumes 页面展示 Docker 数据卷。

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

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

14. Networks:集中查看 Docker 网络

Networks 页面负责 Docker 网络管理。

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

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

15. Templates:应用模板市场

Dockhand 还提供 Templates 页面。

当前页面显示:

866

套社区模板。

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

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

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

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

1

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

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

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

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

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

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

这里 cpolar 只负责:

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

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

18. 安装 cpolar

执行:

shell 复制代码
sudo curl https://get.cpolar.sh | sh

安装完成后检查服务:

shell 复制代码
sudo systemctl status cpolar

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

这里同时出现:

http://ip:9200

以及:

http://localhost:9200/

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

19. 先用随机域名验证 33334

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

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

这里隧道名称使用的是:

dockehand

不是 dockhand

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

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

从其他设备访问。

Dockhand 页面可以正常打开。

这一步确认的是:

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

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

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

进入预留功能。

地区选择:

china Top

这次使用的名称是:

dockehand

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

修改为:

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

点击更新。

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

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

页面可以正常打开。

总结

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

这次实际跑通的链路是:

飞牛 SSH → Docker → /docker/Dockhandfnsys/dockhand:latest33334: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 省多少资源,没有做实际占用对比时不必先下结论,先看它的管理方式是不是更适合自己的使用习惯。

相关推荐
云边有个稻草人3 天前
NAS 里的音乐怎么交给小爱音箱播放?XiaoMusic 部署与公网访问完整流程
nas
深念Y12 天前
fnOS-k3s-ResolvConf权限700-Bug分析
内核·bug·nas·k3s·fnos·魔改内核
SoStraw13 天前
没有公网 IP,5 分钟搭建个人网盘:家里跑 mywebdisk-server,出门用 File2File 连
nas·个人网盘·webrpc·无公网ip·file2file·mywebdisk·p2p网盘
todoitbo17 天前
PDF 合并、转换也能自己部署:极空间运行 Stirling PDF,文件交给自己的服务器处理
网络安全·pdf·文件·nas·极空间
倔强的小石头_20 天前
把音乐播放器放进 NAS:极空间部署 R3PLAYX,并实现浏览器远程访问
nas
SoStraw22 天前
File2File:基于 webrpc 的免费 P2P 传文件 / 个人网盘 / 远程桌面
p2p·nas·个人网盘·大文件传输·webrpc·无公网ip·file2file
顺kai23 天前
Mac 给瑞芯微刷飞牛 fnOS 完整指南
nas
腾视科技-AIoT1 个月前
私有云时代来临:AI NAS如何重塑你的数字生活?
人工智能·ai·生活·nas·ai算力模组·ainas·腾视科技
記億揺晃着的那天1 个月前
NAS 内网域名访问为什么需要浏览器授权
网络·nginx·js·nas