Watchtower 的作用

Watchtower 会自动监控 Docker Hub 或私有仓库中镜像的更新,当发现新版本时,它会停止、拉取新镜像并重新创建容器,保持服务始终运行在最新版本。结合上述参数,可实现按需、定时、自动清理的更新策略。让 Docker 容器镜像保持自动更新

方案一:使用 docker-compose.yml 文件部署

这种方式更适合长期管理和版本控制。创建一个 docker-compose.yml 文件(以下二选一),内容如下:

version: '3'

services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    environment:
      - TZ=Asia/Shanghai
      - WATCHTOWER_NO_STARTUP_MESSAGE=true #WATCHTOWER_NO_STARTUP_MESSAGE:用于禁止 Watchtower 启动时在日志中输出欢迎信息,使日志更简洁。(不赋值表示 true)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 3600 --cleanup --label-enable
    #--interval 3600:设置检查更新的时间间隔为 3600 秒(即 1 小时)
    #--cleanup:更新容器后,自动删除旧版本的镜像,释放磁盘空间。
    #--label-enable:启用基于标签的更新控制。只有那些设置了 com.centurylinklabs.watchtower.enable=true 标签的容器才会被 Watchtower 监控和更新,避免更新所有容器。
services:
    watchtower:
        container_name: watchtower
        image: containrrr/watchtower:latest # 使用最新镜像
        restart: always # #设置容器在异常退出或系统重启后自动重启,增强服务可用性
        volumes:
            - '/var/run/docker.sock:/var/run/docker.sock'
            - '/etc/localtime:/etc/localtime:ro' #让容器与宿主机保持相同的时间设置,确保日志时间准确(可用可不用)
        environment:
            - WATCHTOWER_CLEANUP=true # 更新后自动删除旧映像
            - WATCHTOWER_ROLLING_RESTART=true # 容器启动模式
            - WATCHTOWER_POLL_INTERVAL=86400 # 每 24 小时检查一次更新
            - WATCHTOWER_NO_STARTUP_MESSAGE=true # 禁止在 Watchtower 启动时发送启动消息

需要自动更新的容器在对应的docker-compose.yml加入以下代码

labels:
      com.centurylinklabs.watchtower.enable: 'true'  # 启用watchtower自动更新

方案二:使用 docker run 命令快速部署

docker run -d \
  --name watchtower \
  --restart=unless-stopped \
  -e TZ=Asia/Shanghai \
  -e WATCHTOWER_NO_STARTUP_MESSAGE=true \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \
  --interval 3600 --cleanup --label-enable

方案三:docker管理软件部署

拉取containrrr/watchtower:latest,创建容器更具以下环境变量所需的情况部署

变量名称

变量值

说明

WATCHTOWER_CLEANUP

TRUE

自动删除旧版本镜像,节省磁盘空间

WATCHTOWER_ROLLING_RESTART

TRUE

启用滚动重启机制,逐个容器更新重启,减少服务中断

WATCHTOWER_POLL_INTERVAL

86400

设置每 86400 秒(即 24 小时)检查一次镜像更新

WATCHTOWER_NO_STARTUP_MESSAGE

TRUE

启动时不输出提示信息,使日志更干净

需要自动更新的容器在对应的容器加入以下环境变量

变量名称

变量值

说明

com.centurylinklabs.watchtower.enable

TRUE

启用watchtower自动更新