利用 Watchtower 定时检查哪吒面板新版本并自动更新
之前写过一篇《为哪吒监控面板设置每天定时自动更新》,可以为面板设置每天固定时间(比如凌晨 2 点)检查更新。因为面板更新频繁,我们也可以设置为每隔 1 小时或者半小时检查更新,并在更新后删除旧的镜像。
使用 Watchtower 来自动检查并更新 nezha-dashboard
容器并删除旧镜像,需要配置 Watchtower 以监控该容器并设置清理旧镜像的选项。以下是具体步骤:
启动 Watchtower 容器
运行以下命令以启动 Watchtower 容器,监控 nezha-dashboard
并删除旧的镜像:
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
nezha-dashboard \
--cleanup
参数说明
--name watchtower
: 设置容器名称为watchtower
。--restart always
: 保证 Watchtower 在 Docker 服务重启后自动启动。-v /var/run/docker.sock:/var/run/docker.sock
: 挂载 Docker 的 socket,使 Watchtower 能够与 Docker 引擎通信。containrrr/watchtower
: Watchtower 的镜像名称。nezha-dashboard
: 指定需要监控的容器名称。--cleanup
: 在更新容器后自动删除旧的未使用镜像。
验证 Watchtower 是否正常工作
查看 Watchtower 的日志,确认其是否能够正常检测到 nezha-dashboard
容器的更新:
docker logs -f watchtower
日志中应显示类似以下内容:
INFO[0000] Watching containers for updates...
INFO[0001] Checking for updates on container "nezha-dashboard"
INFO[0002] Found new image for "nezha-dashboard". Pulling image ghcr.io/nezhahq/nezha:latest
INFO[0003] Stopping and removing container "nezha-dashboard"
INFO[0004] Creating new container for "nezha-dashboard"
INFO[0005] Removing old image for "nezha-dashboard"
要让 Watchtower 每隔半小时检查更新并在有更新时自动更新容器并删除旧镜像,可以通过以下方式实现:
配置命令
运行以下命令启动 Watchtower:
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-e TZ=Asia/Hong_Kong \
containrrr/watchtower \
nezha-dashboard \
--cleanup \
--schedule "0 */30 * * *"
参数说明
-e TZ=Asia/Hong_Kong
: 这个环境变量设置容器的时区为 HKT(即香港时间)。这样 Watchtower 将使用本地时区来解析 CRON 表达式。--schedule "0 */30 * * *"
: 在每小时的第 0 分钟和每 30 分钟时执行检查。--cleanup
: 在更新后自动删除旧的未使用镜像,避免占用存储空间。nezha-dashboard
: 指定只监控名为nezha-dashboard
的容器。
验证配置
查看容器是否启动成功
docker ps
确认
watchtower
容器在运行。查看日志
观察 Watchtower 的日志,确保定时任务正确运行:docker logs -f watchtower
日志会显示每 30 分钟执行一次更新检查的记录。
日志示例
日志中应出现类似以下内容:
time="2024-12-01T00:08:32+08:00" level=info msg="Watchtower 1.7.1"
time="2024-12-01T00:08:32+08:00" level=info msg="Using no notifications"
time="2024-12-01T00:08:32+08:00" level=info msg="Only checking containers which name matches \"nezha-dashboard\""
time="2024-12-01T00:08:32+08:00" level=info msg="Scheduling first run: 2024-12-01 00:30:00 +0800 HKT"
time="2024-12-01T00:08:32+08:00" level=info msg="Note that the first check will be performed in 21 minutes, 27 seconds"
这样配置后,Watchtower 将在每小时的第 0 分钟和每 30 分钟时检查 nezha-dashboard
容器是否有更新,并在有新版本时自动更新,随后清理旧镜像。
要取消通过 Watchtower 设置的定时更新和自动删除旧镜像的任务,可以按照以下步骤操作:
停止并删除 Watchtower 容器
运行以下命令停止并删除 Watchtower 容器:
docker stop watchtower && docker rm watchtower && docker rmi containrrr/watchtower
此操作会彻底关闭和移除 Watchtower
,从而停止所有由它管理的定时更新任务。
验证 Watchtower 是否已停止
运行以下命令,确认 Watchtower
容器已不再运行:
docker ps -a | grep watchtower
如果没有输出,说明 Watchtower
已成功停止和删除。
1Panel 面板更简单方便的 Watchtower 安装和设置方法:
如果你是按照我博客的方法,使用 1Panel 来管理哪吒面板的反向代理,那么 Watchtower 安装和设置更简单,因为 1Panel 应用商店自带 Watchtower 应用,可以直接安装。
- 1Panel 左侧
菜单——应用商店
,打开右上角搜索框,搜索Watchtower
。 - 点击
安装
。 - 环境参数:
WATCHTOWER_NO_STARTUP_MESSAGE
;命令参数:nezha-dashboard --interval 1800 --cleanup
。 - 其它保持不变,点击
确认
。
这样,Watchtower 即可自动每隔半小时检查 nezha-dashboard 镜像更新并在更新后删除旧的镜像文件。
版权声明:本文为原创文章,版权归 𝙈𝙄𝙎𝘼𝙆𝘼.𝙀𝙎 所有,转载请联系博主获得授权。
本文地址:https://misaka.es/archives/43.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。