使用Watchtower自动更新Docker镜像

admin
2024-12-02 / 0 评论 / 7 阅读 / 正在检测是否收录...

使用Watchtower自动更新Docker镜像

__imgapi.cn__5c9c2dac47679.jpg 1920×1080

使用 Docker 可以迅速在 VPS 上运行服务,而不用配置和修改环境。Docker 服务的更新通过拉取最新镜像实现,当运行的 Docker 数目多了之后,保持镜像最新就成为了一项琐碎的工作。使用 Watchtower 可以便捷地监控 Docker 服务是否有最新镜像,自动拉取最新镜像、更新服务并删除旧有镜像。

Docker compose 是用于定义和运行多容器 Docker 应用程序的工具。在配置好 docker-compose.yml​ 文件后,使用 docker compose up -d​ 即可方便上线服务,我的全部 Docker 服务都使用这一方式部署。

以下是 Watchtower 的 docker-compose.yml​ 文件设置。

Docker Compose 文件

version: "3.3"

services:
  watchtower:
    image: containrrr/watchtower:latest
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Shanghai
      - WATCHTOWER_DEBUG=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_SCHEDULE=0 0 4 * * ?
      # - WATCHTOWER_POLL_INTERVAL=43200

其中,WATCHTOWER_SCHEDULE​ 和 WATCHTOWER_POLL_INTERVAL​ 均为设置 Watchtower 运行频次的指令,两个方式任选一个。前者使用 Cron 格式,在固定时间运行;后者的单位为秒 (S),经过固定时间间隔运行。

设置 Watchtower 通知服务

Watchtower 使用 Shutrrr 发送通知。以下为设置 Telegram bot 通知:

- WATCHTOWER_LIFECYCLE_HOOKS=True
- WATCHTOWER_NOTIFICATIONS=shoutrrr
- WATCHTOWER_NOTIFICATION_URL=telegram://bot_token@telegram/?channels=user-id
  • 通过 @BotFather​ 创建自己的通知机器人,并获取 bot_token
  • 通过 @GetIDs Bot​ 获取 user-id

推荐 IOS 用户使用 Bark 设置通知 [*]:

- WATCHTOWER_LIFECYCLE_HOOKS=True
- WATCHTOWER_NOTIFICATIONS=shoutrrr
- WATCHTOWER_NOTIFICATION_URL=bark://:devicekey@host/path

使用邮件通知服务

- WATCHTOWER_LIFECYCLE_HOOKS=True
- WATCHTOWER_NOTIFICATIONS=email
- WATCHTOWER_NOTIFICATION_EMAIL_FROM= #设置通知邮件的发件人
- WATCHTOWER_NOTIFICATION_EMAIL_TO= #设置通知邮件的收件人
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com #SMTP 服务器
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 #SMTP 服务器端口
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=
- WATCHTOWER_NOTIFICATION_EMAIL_DELAY= #发送通知前的延迟时间,以秒为单位

设置部分 Docker 禁止更新

1、在不希望被 Watchetower 监控更新的 Docker 容器中添加**环境变量:

WATCHTOWER_LABEL_ENABLE=false

或者添加容器标签

com.centurylinklabs.watchtower.enable=false

2、当无法设置标签时,可以在Watchetower容器中设置环境变量来排除特定的容器,变量填写需要禁止更新的容器名称,用逗号或空格隔开

WATCHTOWER_DISABLE_CONTAINERS=

测试 Watchtower

由于 Watchtower 的默认轮询间隔为 1 小时,因此可能需要等待一段时间才能看到自动更新效果。可以手动触发 Watchtower 的轮询以立即检查是否有更新。可以使用以下命令来手动触发 Watchtower

docker exec -it watchtower /watchtower --debug --run-once nginx

推荐阅读

0

评论

博主关闭了所有页面的评论