banner
约 1,200 字
4 分钟

飞牛应用:Docker 容器更新通知提醒,远程一键更新

摘要

Autodocker 是我给自己做的一个飞牛应用:定时巡检 NAS 上的 Docker 容器镜像,发现新版就往飞书推一张卡片,点一下「立即更新」就自动拉镜像、按原配置重建容器,失败还能自动回滚。这篇讲清楚怎么装、怎么配飞书通知,以及三个按钮分别是什么作用。

前言

家里 NAS 上跑着一堆 Docker 容器,有些容器装完就没再管过,镜像更新了我根本不知道,跑着的可能是有安全漏洞的旧版本,新功能也不能第一时间用到。

也试过 Watchtower 这类全自动更新,但看评论有可能更新时把 nas 弄崩溃。

我的需求其实很简单:有新版本的时候提醒我,我看到,点一下,它自己去更新,出问题还能自动恢复。

找了一圈没有特别满意的,干脆自己做了应用 Autodocker:定时巡检本机容器的镜像,发现新版本就把通知推到飞书上;只要点一下「立即更新」,它就把新镜像拉下来、按原来的配置把容器重建好。挂载、端口、网络、环境变量一样不少,失败了还会自动回滚。

ui-dark.png

操作流程

整个流程就三步:装上应用 → 配好飞书 → 等提醒 → 点一下就更新。

一、使用

巡检发现新版本后,飞书群里会收到这样一张卡片,容器、镜像、当前版本、可用版本都列在上面:

飞书收到的更新提醒卡片

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

点击后卡片变成「正在更新容器」

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

更新完成

三个按钮分别是:

按钮

作用

立即更新

拉新镜像 + 按原配置重建容器,卡片原地变成进度与结果

稍后提醒

这轮不动,下次巡检还会提醒

忽略本版本

这个容器不再提醒(在网页里可以恢复)

二、安装

把 Autodocker.fpk 传到 NAS,在应用中心 → 手动安装里选中它。

应用中心手动安装 fpk

安装向导可以修改设置,基本保持默认就好:自动巡检间隔(默认 1 小时,也可以选「关闭定时巡检」只手动扫描)和镜像加速地址(内置1ms和轩辕镜像)。

装好后桌面会出现「Docker 更新助手」图标,点开即用;也可以直接在浏览器访问 http://<NAS_IP>:19999。默认不启用登录,打开就能用,但如果远程使用建议在设置里填写登录密码。

三、配置飞书通知

飞书的三项配置,都填在应用「设置」标签页的这个面板里:

应用「设置」页的飞书通知面板

必须创建企业自建应用,群自定义机器人(webhook)不行,因为自定义机器人只能单向发消息,收不到按钮点击。

1. 建应用

打开飞书开放平台 · 开发者后台,点「创建企业自建应用」,名字随意。

创建企业自建应用

2. 加机器人能力

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

添加机器人能力

3. 取凭据

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

应用凭证页

4. 开权限

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

  • im:message:send_as_bot

  • im:chat:readonly

开通两项应用身份权限

5. 配回调

左侧「开发配置 → 事件与回调」→ 切到 「回调配置」标签页:

  • 「订阅方式」选 「使用长连接接收回调」,点保存

  • 「已订阅的回调」→ 添加回调 → 搜 「卡片回传交互」(card.action.trigger)→ 确认添加

选择长连接并订阅卡片回传交互

用长连接就不需要公网地址、备案域名和反向代理,NAS 只要能出网就能收到按钮点击。

6. 发布版本

左侧「应用发布 → 版本管理与发布」→ 创建版本 → 提交发布。权限和回调改完,必须发布新版本才会生效。

版本管理与发布

7. 把机器人拉进群

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

添加机器人到群

8. 取群 ID

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

群设置里的会话 ID

三个值(App ID / App Secret / chat_id)一并留空,就等于完全关闭飞书通知。

验证一下

设置填完点「保存设置」,再点「发送飞书测试卡片」。卡片上带一个按钮,点一下、卡片变成「回调已收到」,说明按钮交互这条链路也通了(它和「收得到消息」是两回事)。

保存设置并发送测试卡片

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

飞书群收到的测试卡片

点一下卡片上的按钮:

点击按钮后卡片变成「回调已收到」

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

设置面板提示按钮链路正常

按钮无反应时,多半是「回调配置」里没加 card.action.trigger,或者改完没发布新版本。

项目来源

Autodocker 是把我用过的两个开源项目合到一起,毕竟我不是程序员,自己从头写不现实,这样正好能满足我的需求:

来源

它有什么

它缺什么

vigil

定时扫描本机镜像、比对注册表 digest 与 tag、多渠道通知

只通知,不帮你更新

dockerCopilot

一键更新容器、保留原配置重建、备份恢复

没有注册表检测,也没有 IM 交互

结尾

目前算是个测试版,打包成飞牛 fnOS 应用(.fpk)用起来比较方便。测试一段时间后,我研究一下怎么发布 docker 镜像,会把项目开源到 GitHub,并且发布 Docker 镜像版。

目前通知只走飞书,是因为我自己用飞书比较多,通知卡片用起来也方便,后续如果有需要会加上钉钉、Telegram、企业微信等选项。

有问题给我留言哈。

下载地址:https://pan.quark.cn/s/051f561c655c 提取码:Figh

END