我在之前的一篇文章《两个开源项目打造自己的大模型聚合平台》中介绍过,我目前在使用open-webui和onehub这两个开源软件,作为自己ai chat的平台,当时为了方便都使用了docker进行部署。这两个开源软件目前都输入活跃状态,所以基本上1-2周都会更新一版。加上一些其他比如dify、n8n之类的软件,所以之前我几乎每周都必须要有一次手动操作docker更新镜像的操作,虽然不是特别麻烦,但是每次手动操作还是有些繁琐。最近我发现了Watchtower这个docker工具,居然可以自动化更新,非常方便,这里分享个给大家。
什么是Watchtower
简要介绍一下Watchtower,它是一个自动化更新Docker镜像的工具,专门用于监控运行中的Docker容器并自动将它们更新到最新版本。当检测到镜像更新时,Watchtower会自动按原有配置重将已经运行的容器更新到最新镜像,确保你一直使用最新的版本。 但这里也额外提醒下,这个工具还比较适合像我这种个人使用场景,追求各类工具最新feature的情况,在生产环境下还是有限保证功能稳定性,反而不适合无规划的自动升级。
安装与使用
其使用也非常简单,本身它也是一个docker容器。直接docker run 即可启动,启动后它就会自动监控您所有正在运行的Docker容器。
使用Docker运行Watchtower
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
也可以使用docker compose启动,也非常方便。
使用Docker Compose
version: "3"
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 30
配置选项
常用命令行参数
Watchtower提供了多种命令行参数,让用户可以灵活控制其行为。以下是一些最常用的参数:
参数 | 说明 |
---|---|
–interval, -i | 检查更新的间隔时间(秒),不配置的话默认是24h更新 |
–cleanup | 更新后自动移除旧的镜像,默认不会主动移除旧镜像,如果你磁盘工具不是很充裕,建议开启 |
–debug | 启用调试模式 |
–monitor-only | 只监控不更新 |
–run-once | 只运行一次然后退出 |
选择性更新特定容器
如果你不想更新所有容器,可以在启动Watchtower时指定特定的容器名称:
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower container1 container2
这样Watchtower只会监控和更新名为container1和container2的容器,而忽略其他容器。
注意事项
- 数据持久化: 确保容器数据通过卷(volumes)正确持久化,避免更新时数据丢失
- 生产环境慎用: 如开头所述,此工具可能只适合个人开发者,在生产环境中需谨慎使用
- 网络带宽: 频繁的检查和更新可能会消耗大量网络带宽
总结
Watchtower为Docker用户提供了一种简便的方式来保持容器始终运行最新版本,大大减轻了手动更新的负担。对于个人开发环境或非关键应用,它是一个极其有用的工具。通过合理配置更新间隔和通知选项,可以在保持系统最新的同时避免不必要的干扰。