
Docker 配置容器自动更新(使用 Watchtower)
📌 背景
在日常运维中,保持 Docker 容器更新至最新版本至关重要。手动更新既繁琐又容易遗漏,特别是在管理多个容器时。Watchtower 作为轻量级解决方案,可自动监控并更新运行中的容器。
什么是 Watchtower?
Watchtower 是开源的 Docker 容器自动更新工具,通过定期检查 Docker Hub 或其他镜像仓库的更新,自动拉取新镜像并重启容器,确保服务始终运行最新版本。
Watchtower 不适用于 Podman。Podman 容器的自动更新是通过 podman-auto-update
实现的。
Watchtower 需要主机具有访问 Docker 守护进程的权限。
🛠️ 安装与运行
基础运行方式
1 | docker run -d \ |
参数说明
参数 | 说明 |
---|---|
-d | 后台运行,推荐使用。 |
–name watchtower | 指定容器名称。可自行更改。 |
–restart unless-stopped | 除非主动停止,否则容器异常退出时自动重启。此项可选,但推荐启用。 |
-v /var/run/docker.sock:/var/run/docker.sock | 挂载 Docker 守护进程的 socket 文件。必须保留且不能修改。 |
使用 Docker Compose
创建 docker-compose.yml
文件:
1 | version: "3" |
启动服务:
1 | docker-compose up -d |
⚙️ 配置选项
定时更新
通过环境变量设置 cron 表达式,可实现计划更新:
1 | # 从容器启动开始,每 6 小时更新 |
此项同样适用于 Docker Compose:
1 | # 每天凌晨 3 点更新 |
选择性更新
为不需要自动更新的容器添加标签:
1 | docker run --label=com.centurylinklabs.watchtower.enable=false container_name |
如果你只想让 Watchtower 只更新特定容器,你也可以反过来做:
在 Watchtower 的运行命令中添加 --label-enable
,那么 Watchtower 将只更新那些带有标签 com.centurylinklabs.watchtower.enable=true
的容器。这种情况下,你只需要在你想要 Watchtower 更新的容器上添加这个标签即可,其他没有这个标签的容器都会被 Watchtower 忽略。
1 | docker run -d \ |
只更新特定容器
只需要在命令中添加你希望更新的容器的名称或者 ID 即可。
例如我只想让 Watchtower 更新名为 my-container
的容器:
1 | docker run -d \ |
自动删除旧镜像
如果需要 Watchtower 在自动更新容器时,删除旧的镜像以节约存储空间,直接在命令结尾添加 --cleanup
参数即可。
1 | docker run -d \ |
手动立即更新
向 Watchtower 容器发送一个 SIGHUP
信号来让它立即检查更新。
1 | docker kill -s SIGHUP watchtower |
kill
命令的作用是发送信号,而不是结束进程。
这个命令不会停止 Watchtower 容器,也不会影响计划更新任务,相当于额外手动进行一次更新。
📝 验证与监控
检查 Watchtower 日志:
1 | docker logs watchtower --since 5m |
典型更新日志示例:
1 | time="2025-07-14T03:00:01Z" level=info msg="Found new nginx:latest image" |
💎 写在最后
Watchtower 为 Docker 容器提供了简单高效的自动化更新方案,特别适合以下场景:
- 开发测试环境快速迭代
- 安全补丁的及时应用
- 无人值守的服务器维护
当然,生产环境不容得任何闪失,所以在更新之前最好还是确认容器的健康状态,做好备选方案,避免更新后出现新的问题。
如有任何问题,欢迎交流讨论!
(封面图片由 AI 生成)
- 标题: Docker 配置容器自动更新(使用 Watchtower)
- 作者: GT610
- 创建于 : 2025-07-17 00:15:59
- 更新于 : 2025-09-23 15:09:18
- 链接: https://gt-610.dpdns.org/2025/07/16/docker-auto-update/
- 版权声明: 本文章采用 CC BY 4.0 进行许可。