由于哪吒面板 V1 最近更新频繁,我们可以设置为每隔 1 小时或者半小时检查更新,并在更新后删除旧的镜像。
使用 Watchtower 来自动检查并更新 nezha-dashboard
容器并删除旧镜像,需要配置 Watchtower 以监控该容器并设置清理旧镜像的选项。以下是具体步骤:
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
此操作会彻底关闭和移除 Watchtower
,从而停止所有由它管理的定时更新任务。
验证 Watchtower 是否已停止
运行以下命令,确认 Watchtower
容器已不再运行:
docker ps -a | grep watchtower
如果没有输出,说明 Watchtower
已成功停止和删除。
删除 Watchtower 镜像(可选)
如果不再需要 Watchtower
,可以删除其镜像以释放存储空间:
docker rmi containrrr/watchtower
通过这些步骤,Watchtower
的自动更新功能会被完全取消,并恢复到手动管理模式。