Docker容器自动更新利器:Watchtower

发布于:2025-06-23 ⋅ 阅读:(15) ⋅ 点赞:(0)

我在之前的一篇文章《两个开源项目打造自己的大模型聚合平台》中介绍过,我目前在使用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用户提供了一种简便的方式来保持容器始终运行最新版本,大大减轻了手动更新的负担。对于个人开发环境或非关键应用,它是一个极其有用的工具。通过合理配置更新间隔和通知选项,可以在保持系统最新的同时避免不必要的干扰。


网站公告

今日签到

点亮在社区的每一天
去签到