使用Watchtower自动更新Docker镜像
使用 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
- 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
评论