飞牛应用:Docker 容器更新通知提醒,远程一键更新
摘要
Autodocker 是我给自己做的一个飞牛应用:定时巡检 NAS 上的 Docker 容器镜像,发现新版就往飞书推一张卡片,点一下「立即更新」就自动拉镜像、按原配置重建容器,失败还能自动回滚。这篇讲清楚怎么装、怎么配飞书通知,以及三个按钮分别是什么作用。
前言
家里 NAS 上跑着一堆 Docker 容器,有些容器装完就没再管过,镜像更新了我根本不知道,跑着的可能是有安全漏洞的旧版本,新功能也不能第一时间用到。
也试过 Watchtower 这类全自动更新,但看评论有可能更新时把 nas 弄崩溃。
我的需求其实很简单:有新版本的时候提醒我,我看到,点一下,它自己去更新,出问题还能自动恢复。
找了一圈没有特别满意的,干脆自己做了应用 Autodocker:定时巡检本机容器的镜像,发现新版本就把通知推到飞书上;只要点一下「立即更新」,它就把新镜像拉下来、按原来的配置把容器重建好。挂载、端口、网络、环境变量一样不少,失败了还会自动回滚。

操作流程
整个流程就三步:装上应用 → 配好飞书 → 等提醒 → 点一下就更新。
一、使用
巡检发现新版本后,飞书群里会收到这样一张卡片,容器、镜像、当前版本、可用版本都列在上面:

点「立即更新」,剩下的交给它:

不用你去别处看结果,卡片自己会更新:

三个按钮分别是:
按钮 | 作用 |
|---|---|
立即更新 | 拉新镜像 + 按原配置重建容器,卡片原地变成进度与结果 |
稍后提醒 | 这轮不动,下次巡检还会提醒 |
忽略本版本 | 这个容器不再提醒(在网页里可以恢复) |
二、安装
把 Autodocker.fpk 传到 NAS,在应用中心 → 手动安装里选中它。

安装向导可以修改设置,基本保持默认就好:自动巡检间隔(默认 1 小时,也可以选「关闭定时巡检」只手动扫描)和镜像加速地址(内置1ms和轩辕镜像)。
装好后桌面会出现「Docker 更新助手」图标,点开即用;也可以直接在浏览器访问 http://<NAS_IP>:19999。默认不启用登录,打开就能用,但如果远程使用建议在设置里填写登录密码。
三、配置飞书通知
飞书的三项配置,都填在应用「设置」标签页的这个面板里:

必须创建企业自建应用,群自定义机器人(webhook)不行,因为自定义机器人只能单向发消息,收不到按钮点击。
1. 建应用
打开飞书开放平台 · 开发者后台,点「创建企业自建应用」,名字随意。

2. 加机器人能力
左侧「应用能力 → 机器人」→ 添加应用能力,确认「消息卡片」开关是打开的。

3. 取凭据
左侧「凭证与基础信息」,把 App ID 和 App Secret 填到上面那个设置面板里。

4. 开权限
左侧「开发配置 → 权限管理 → API 权限」,搜到下面两项并开通,权限类型都选 「应用身份」:
im:message:send_as_botim:chat:readonly

5. 配回调
左侧「开发配置 → 事件与回调」→ 切到 「回调配置」标签页:
「订阅方式」选 「使用长连接接收回调」,点保存
「已订阅的回调」→ 添加回调 → 搜 「卡片回传交互」(
card.action.trigger)→ 确认添加

用长连接就不需要公网地址、备案域名和反向代理,NAS 只要能出网就能收到按钮点击。
6. 发布版本
左侧「应用发布 → 版本管理与发布」→ 创建版本 → 提交发布。权限和回调改完,必须发布新版本才会生效。

7. 把机器人拉进群
飞书里打开目标群 → 右上角设置 → 群机器人 → 添加机器人,选中你刚建的这个应用。

8. 取群 ID
在群设置底部就能直接看到「会话 ID」,形如 oc_xxxxxxxx,把它填进设置面板的 chat_id。也可以在飞书 API 调试台搜「获取机器人所在的群列表」,以应用身份调用,返回里的 chat_id 是一样的。

三个值(App ID / App Secret / chat_id)一并留空,就等于完全关闭飞书通知。
验证一下
设置填完点「保存设置」,再点「发送飞书测试卡片」。卡片上带一个按钮,点一下、卡片变成「回调已收到」,说明按钮交互这条链路也通了(它和「收得到消息」是两回事)。

飞书群里会收到这张卡片:

点一下卡片上的按钮:

设置面板这边会提示按钮链路正常:

按钮无反应时,多半是「回调配置」里没加
card.action.trigger,或者改完没发布新版本。
项目来源
Autodocker 是把我用过的两个开源项目合到一起,毕竟我不是程序员,自己从头写不现实,这样正好能满足我的需求:
来源 | 它有什么 | 它缺什么 |
|---|---|---|
定时扫描本机镜像、比对注册表 digest 与 tag、多渠道通知 | 只通知,不帮你更新 | |
一键更新容器、保留原配置重建、备份恢复 | 没有注册表检测,也没有 IM 交互 |
结尾
目前算是个测试版,打包成飞牛 fnOS 应用(.fpk)用起来比较方便。测试一段时间后,我研究一下怎么发布 docker 镜像,会把项目开源到 GitHub,并且发布 Docker 镜像版。
目前通知只走飞书,是因为我自己用飞书比较多,通知卡片用起来也方便,后续如果有需要会加上钉钉、Telegram、企业微信等选项。
有问题给我留言哈。
下载地址:https://pan.quark.cn/s/051f561c655c 提取码:Figh