在自动更新过程中,尽管会出现连接超时的报告,但容器仍能够正常更新。此外,配置通知功能后,每次执行时都会通知存在的错误。

若不需要通知,可删除通知配置相关的环境变量。

Watchtower 是一个用于自动更新 Docker 容器的开源工具。它能够检测您运行的 Docker 容器是否有新版本可用,并自动更新这些容器,从而帮助您保持容器应用程序的安全性和稳定性。

主要功能:

  • 自动容器更新:Watchtower 可以定期检查 Docker Hub 或者其他容器仓库中的镜像,如果发现新版本,它将自动下载新的镜像并更新正在运行的容器。

  • 定期检查:您可以配置 Watchtower 以定期检查容器,以确保容器始终处于最新状态。您可以设置检查的时间间隔。

  • 邮件通知:Watchtower 可以配置为在更新容器时发送邮件通知,以便您及时了解容器的变化情况。

  • 灵活性:您可以选择性地排除某些容器不受自动更新的影响,以满足特定需求。

  • 日志记录:Watchtower 会记录容器更新的日志,以便您可以随时查看更新历史。

  • 支持多种容器仓库:除了 Docker Hub,Watchtower 还支持其他容器仓库,因此您可以使用自己喜欢的容器镜像。

1、compose配置

networks:
    app_network:
        external: true
services:
    watchtower:
        image: containrrr/watchtower:latest
        volumes:
            - '/var/run/docker.sock:/var/run/docker.sock'
            - /etc/localtime:/etc/localtime:ro
        environment:
            - WATCHTOWER_CLEANUP=true
            - WATCHTOWER_ROLLING_RESTART=true
            - WATCHTOWER_SCHEDULE=0 0 * * * ?
 #           - WATCHTOWER_POLL_INTERVAL=3600
            - WATCHTOWER_NO_STARTUP_MESSAGE=true
            - WATCHTOWER_TIMEOUT=60s
            - WATCHTOWER_NOTIFICATION_EMAIL_DELAY=xx
            - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=xx
            - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=xx
            - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=465
            - WATCHTOWER_NOTIFICATION_EMAIL_SERVER=xx
            - WATCHTOWER_NOTIFICATION_EMAIL_TO=xx
            - WATCHTOWER_NOTIFICATION_EMAIL_FROM=xx
            - WATCHTOWER_NOTIFICATIONS=email
            - WATCHTOWER_NOTIFICATIONS_LEVEL=info
        container_name: watchtower
        restart: always
        networks:
            - app_network

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

2.2、邮箱通知

变量名

示例(QQ邮箱)

描述

WATCHTOWER_NOTIFICATIONS_LEVEL

info

控制用于通知的日志级别。可选值:panicfatalerrorwarninfodebug 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 时很有用。注意:这将影响所有通知类型。

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容器。