在自动更新过程中,尽管会出现连接超时的报告,但容器仍能够正常更新。此外,配置通知功能后,每次执行时都会通知存在的错误。
若不需要通知,可删除通知配置相关的环境变量。
Watchtower 是一个用于自动更新 Docker 容器的开源工具。它能够检测您运行的 Docker 容器是否有新版本可用,并自动更新这些容器,从而帮助您保持容器应用程序的安全性和稳定性。
主要功能:
- 自动容器更新:Watchtower 可以定期检查 Docker Hub 或者其他容器仓库中的镜像,如果发现新版本,它将自动下载新的镜像并更新正在运行的容器。
- 定期检查:您可以配置 Watchtower 以定期检查容器,以确保容器始终处于最新状态。您可以设置检查的时间间隔。
- 邮件通知:Watchtower 可以配置为在更新容器时发送邮件通知,以便您及时了解容器的变化情况。
- 灵活性:您可以选择性地排除某些容器不受自动更新的影响,以满足特定需求。
- 日志记录:Watchtower 会记录容器更新的日志,以便您可以随时查看更新历史。
- 支持多种容器仓库:除了 Docker Hub,Watchtower 还支持其他容器仓库,因此您可以使用自己喜欢的容器镜像。
1、compose配置
下面是我目前自己使用的compose文件。仅供大家参考使用。
version: "3"
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
restart: always
environment:
- TZ=Asia/Shanghai # 时区
# - WATCHTOWER_MONITOR_ONLY=true #使用此参数则仅提醒有更新而不自动升级容器
- WATCHTOWER_NOTIFICATION_TITLE_TAG=FN-Docker # 邮件标题
- WATCHTOWER_NOTIFICATIONS=email # 启用email
- WATCHTOWER_NOTIFICATION_EMAIL_FROM=fromaddress@gmail.com # 发送邮箱
- WATCHTOWER_NOTIFICATION_EMAIL_TO=toaddress@gmail.com # 接收邮箱
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com # smtp服务器
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=465 # 必须使用加密模式发送,不能使用25端口
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=fromaddress@gmail.com # 发件用户名
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=app_password # 发件密码
- WATCHTOWER_NOTIFICATION_EMAIL_DELAY=10 # 延迟10秒发送
# - WATCHTOWER_NOTIFICATION_LEVEL=info # 信息等级
volumes:
- /var/run/docker.sock:/var/run/docker.sock # 访问 Docker 守护进程
command: --cleanup --schedule "0 0 3 * * *" --debug # 每天凌晨 3 点执行更新,删除旧镜像,开启debug
2、环境变量
2.1、参数
变量名 | 值 | 描述 |
---|---|---|
WATCHTOWER_CLEANUP | true / false | 更新后删除旧映像 |
WATCHTOWER_SCHEDULE | 0 0 * * * ? | 精确定时,Cron表达式(6位表达式非常规的5位),0 0 * * * ? :表示每小时的0分0秒时执行,不能与WATCHTOWER_POLL_INTERVAL 同时使用 |
WATCHTOWER_POLL_INTERVAL | 86400 | 轮询间隔(以秒为单位),默认24小时,不能与WATCHTOWER_SCHEDULE 同时使用 |
WATCHTOWER_NO_STARTUP_MESSAGE | true / false | 请勿在 watchtower 启动后发送消息。否则,将出现信息级通知。 |
WATCHTOWER_TIMEOUT | 60s | 强制停止容器之前的超时时间。 |
WATCHTOWER_DISABLE_CONTAINERS | mysql | 不监控更新的容器名称列表,使用逗号或空格分隔的字符串列表,默认情况下使用标签禁用更新,若配置此变量,则此变量配置的规则优先。标签禁用更新的配置方式查看2.3 |
WATCHTOWER_ROLLING_RESTART | true / false | 一次重新启动一个容器,而不是一次停止和启动所有容器。默认:false |
- 更多参数详见文档:Arguments – Watchtower
2.2、邮箱通知
变量名 | 示例(QQ邮箱) | 描述 |
---|---|---|
WATCHTOWER_NOTIFICATIONS_LEVEL | info | 控制用于通知的日志级别。可选值:panic 、 fatal 、 error 、warn 、 info 、debug 、 trace ,默认:info |
WATCHTOWER_NOTIFICATIONS | email | 设置通知类型 |
WATCHTOWER_NOTIFICATION_EMAIL_FROM | 1@qq.com | 发送通知的电子邮件地址 |
WATCHTOWER_NOTIFICATION_EMAIL_TO | 2@qq.com | 将接收通知的电子邮件地址 |
WATCHTOWER_NOTIFICATION_EMAIL_SERVER | smtp.qq.com | 发送电子邮件的 SMTP 服务器 |
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT | 465 | 用于连接到 SMTP 服务器以发送电子邮件的端口 |
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER | 1@qq.com | 用于向 SMTP 服务器进行身份验证的用户名 |
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD | 1@qq.com的授权码 | 用于向 SMTP 服务器进行身份验证的密码 |
WATCHTOWER_NOTIFICATION_EMAIL_DELAY | 2 | 发送通知之前的延迟,以秒为单位 |
WATCHTOWER_NOTIFICATION_EMAIL_SUBJECTTAG | 要包含在主题标记中的前缀。在运行多个 Watchtower 时很有用。注意:这将影响所有通知类型。 |
- 其他通知配置详见文档:Notifications – Watchtower
2.3、容器标签禁用监视更新
services:
mysql:
container_name: mysql
image: mysql:8
。。。
# 添加标签内容,禁用此容器的监视更新
labels:
- com.centurylinklabs.watchtower.enable=false
以mysql为例:
在compose配置中添加labels节点;
labels节点下添加- com.centurylinklabs.watchtower.enable=false关闭容器的监视更新;
此时Watchtower轮训检查时将会忽略mysql容器。
除非注明,否则均为 曼诺 原创文章,转载请注明出处:https://www.wamano.com/2025/4490.html