Docker 镜像有新版,手机收到提醒,点一下就自动更新
摘要
Autodocker 开源了,也补上了 Docker 安装方式:群晖、威联通、树莓派、软路由、云主机,只要能跑 Docker 就能装。定时巡检本机容器的镜像,发现新版就往飞书推一张卡片,手机上点一下「立即更新」,它自己拉镜像、按原配置重建容器,失败了自动回滚。这篇讲怎么用 compose 或一条 docker run 装起来,以及收到提醒之后会发生什么。
前言
上一篇发的是 Autodocker 的飞牛安装版。这次把项目开源到了 GitHub,也补上了 Docker 安装方式:不用飞牛系统,群晖、威联通、树莓派、软路由、云主机,只要能跑 Docker 就能装。
装好之后就是标题里那件事:容器镜像有新版,手机会收到一条提醒,点一下「立即更新」,它自己把新镜像拉下来、按原配置重建容器,失败了还能自动回滚。功能和飞牛版完全一致。
项目地址:https://github.com/haihaipypy/autodocker

两个版本的差别
飞牛应用包 | Docker 镜像版 | |
|---|---|---|
怎么装 | 应用中心手动安装 |
|
默认端口 | 19999 | 17777 |
适合 | 飞牛 fnOS | 群晖、威联通、树莓派、软路由、云主机、任意 Linux |
升级 | 下载新包覆盖安装 |
|
功能 | 完全一致 | 完全一致 |
镜像同时提供 linux/amd64 与 linux/arm64,x86 的 NAS 和 ARM 的树莓派都能用。发布在 Docker Hub 和 GHCR 两个仓库,一个拉不动就换另一个。
同一台机器只装一个版本。 两个版本都会连宿主机的 Docker,同时开会重复巡检、重复发通知。
方式一:docker compose(推荐)
先在任意目录建一个文件夹,新建一个 docker-compose.yml
启动项目

项目启动后,浏览器打开:
打开就是界面,不用注册、不用登录(默认没设密码)。
yaml 文件里需要你留意的只有三处,其余都是可选的注释项:
配置 | 为什么必须有 |
|---|---|
| 靠它看到宿主机的容器、拉镜像、重建容器。少了它,容器列表是空的 |
| 存设置和更新记录。不挂的话容器重建后配置会丢 |
| 网页端口。左边是宿主机端口,右边是容器内端口,只能改左边 |
SELF_CONTAINER=autodocker 是告诉程序「你自己叫这个名字」,它会拒绝更新自己。如果你把 container_name 改成了别的,这一行要跟着改。
Docker Hub 拉不动就换 GHCR,或其他镜像源地址,内容完全一样:
方式二:docker run
不想建文件,一条命令也行:
要密码就加一行 -e ADMIN_PASSWORD='你的密码'。
使用
1. 容器列表
首次启动会自动扫描一次,把本机所有带 tag 的镜像都纳入监控。打开网页就能看到在跑的容器、当前版本、有没有可用的新版。

2. 配好飞书
进网页「设置」标签页,填三项:App ID、App Secret、chat_id。

设置页里内置了一份 8 步配置指引,展开照着做就行,建应用、开权限、配回调、发布版本、拉机器人进群都在里面。填完点「发送飞书测试卡片」,能在群里收到卡片、点一下变成「回调已收到」,就说明链路通了。想看得更细,上一篇有逐图说明。
3. 决定要不要设密码
默认不启用登录,打开网页就能用。端口只在内网的话这样最省事;要让它离开内网,就去设置里配上访问密码。原因见下面的注意事项。
收到提醒之后
巡检发现新版本,飞书群里会收到这样一张卡片,容器、镜像、当前版本、可用版本都列在上面:

点「立即更新」,卡片原地变成进度,不用回网页、不用登服务器:

镜像拉完、容器重建完成,结果直接回到这张卡片上:

三个按钮的分工:
按钮 | 做什么 |
|---|---|
立即更新 | 拉新镜像,按原配置重建容器,卡片原地变成进度和结果 |
稍后提醒 | 这一轮不动,下次巡检还会提醒 |
忽略本版本 | 这个容器不再提醒,在网页里可以恢复 |
重建用的是原来那份配置,挂载目录、端口映射、网络、环境变量一样都不会丢。新容器起来后有一段观察窗口,健康检查没过就自动回滚,把旧容器重新拉起来。
升级
配置和数据都在 ./data 里,升级不动它们。
镜像标签有四种,按需要选:
标签 | 含义 |
|---|---|
| 最近一次正式版本,默认用这个 |
| 锁死某个版本,不跟着往前跑 |
| 主干最新构建,可能夹带没做完的改动 |
| 对应某次提交,排查问题时用 |
latest 只在发正式版本时移动,主干上的半成品不会跑到你机器上。
注意事项与常见问题
情况 | 说明 | 怎么处理 |
|---|---|---|
挂了 docker.sock | 程序因此拿到宿主机 root 权限,谁能打开这个网页,谁就能操作你所有的容器 | 只在内网用。要让端口离开内网,去设置里配上访问密码 |
程序不会更新自己 | 靠容器名和容器内的 hostname 双重判断,更新自己会导致进程被杀、任务断在半路 | 不用管,这是有意设计的 |
网页打不开 | 端口没映射对,或者宿主机防火墙没放行 |
|
换了端口后打不开 |
| 只换对外端口就改左边, |
列表里全是「未知」 | 检测是程序自己向镜像仓库发请求,不走 Docker 守护进程的加速配置 | 进设置填加速地址(比如 |
拉镜像一直超时 | Docker Hub 在国内时快时慢,匿名拉取还按 IP 限流 | 把 |
更新完多出一个 | 这是回滚用的现场备份 | 成功后会自动删掉;确认新容器没问题后可以 |
想备份配置 | 设置和更新记录都在 SQLite 里 | 拷走 |
卸载:
数据都在 ./data 目录里,不要了连目录一起删。
结尾
Docker Hub:
haihaipypy/autodockerGHCR:
ghcr.io/haihaipypy/autodocker飞牛用户:继续用应用包就行,没必要换
通知目前只走飞书,因为我自己用得最多,卡片上的按钮也顺手。后续会加钉钉、Telegram、企业微信这些渠道,用哪个填哪个。
有问题评论区说一声。