正常情况更新docker,我们都是手动 docker stop、docker rm、docker pull、docker run 四连操作更新一个容器。
一个两个容器还好,手上跑着十几个服务的时候,你就知道什么叫”运维的尽头是重复劳动”。
而 Watchtower,就是那个替你干活的人。
Watchtower 是一个开源的 Docker 容器自动更新工具。它做的事情用一句话就能说清楚:
监控你正在运行的容器,发现镜像有新版了,自动帮你更新。
就这么简单。它会:
GitHub 项目地址:https://github.com/containrrr/watchtower,开源免费。
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
就这么一行。从现在开始,你服务器上所有容器都会每 24 小时 自动检查一次更新,有新版就更新。
注意:如果你是生产环境,直接无差别全量更新可能有点刺激。别急,后面有”精准打击”方案。
不是所有容器都适合自动更新。数据库这种万一更新了配置不兼容,你怕是要连夜爬起来修。
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower nginx redis adguardhome
命令最后加上容器名,只更新你指定的那几个。放心多了吧?
用 Compose 管理的话更优雅:
version: "3.8"
services:
watchtower:
image:containrrr/watchtower:latest
container_name:watchtower
restart:unless-stopped
volumes:
-/var/run/docker.sock:/var/run/docker.sock
command:
-"--interval" # 检查间隔(秒)
-"86400" # 86400秒 = 24小时
-"--cleanup" # 更新后自动清理旧镜像,防止磁盘被 none 镜像吃满
-"nginx" # 指定要监控的容器名
-"redis"
environment:
-TZ=Asia/Shanghai # 设置时区
⚠️ 重点提醒 :
--cleanup(或者-c)参数一定要加上。不然每次更新都会在本地留一个<none>的旧镜像,时间一长磁盘空间就跟你的耐心一样,告急。
默认 24 小时检查一次,其实对大多数人来说已经够用了。但如果你想更灵活,可以使用interval参数:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--interval 3600 # 每小时检查一次
单位是秒。常用的几个值:
间隔| 秒数
—|—
5 分钟| 300
1 小时| 3600
6 小时| 21600
12 小时| 43200
24 小时| 86400
不想设置常驻服务?先测试一下:
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--run-once \
nginx redis
--run-once 让 Watchtower 只执行一次检查就退出,--rm 让它执行完自动删除容器。适合第一次尝鲜。
--cleanup,你的 /var/lib/docker 会慢慢被 <none> 镜像塞满。别问我怎么知道的。Watchtower 不是一个”要不要用”的问题,而是一个”怎么用”的问题。
对于个人开发、NAS、测试环境,它是真正的运维神器 。每天省下的手动更新时间,够你摸不少鱼了。
而对于生产环境,建议用”白名单 + 定时 + 排除标签”的组合拳,在自动化和安全之间找到你自己的平衡点。
参考链接:
🌟 与你互动
嗨~这里是【医工学习日志】的温暖小窝!
📩 随时戳一戳 :后台留言任何问题,树树会带着光速回复闪现!
💡 奇思妙想征集令 :
👉 遇到有趣资源?戳我分享!
👉 想看的硬核测评?甩题过来!
🔥 你的脑洞,可能成为下期爆款文章哦~
如需有偿部署服务或商务,请加V注明来意,不闲聊:
📝 栏目信息
策划编辑 ✨ 树树 ✨
技术支撑 @恩山无线论坛 & Github & 瀚思彼岸
📜 版权声明
内容说明:
原创文章转载请私信授权;
部分素材源自网络,版权归属原作者;
如觉侵权,请凭权属证明联系删除