Watchtower
Watchtower 是一个自动化的容器更新工具,它可以监视运行中的 Docker 容器,当检测到容器镜像的更新版本时,会自动拉取新镜像并使用相同的启动参数重新启动容器。
官方网站
- 项目主页:containrrr/watchtower
- Docker Hub:containrrr/watchtower
Docker方式安装
compose文件
创建 compose.yml
文件:
version: "3"
services:
watchtower:
container_name: watchtower
image: containrrr/watchtower:latest
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ${DOCKER_DIR}/watchtower/config.json:/config.json
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_POLL_INTERVAL=86400
- WATCHTOWER_INCLUDE_STOPPED=false
- WATCHTOWER_NOTIFICATION_REPORT=true
env_file:
- .env
env文件
创建 .env
文件,用于配置通知和其他参数:
# 通知配置
WATCHTOWER_NOTIFICATIONS=shoutrrr
WATCHTOWER_NOTIFICATION_URL=telegram://API_TOKEN@telegram/?channels=CHAT_ID
# 私有仓库配置(如果需要)
# WATCHTOWER_USER=username
# WATCHTOWER_PASSWORD=password
启动
docker compose up -d
配置文件
如果需要访问私有仓库,创建 config.json
文件:
{
"auths": {
"registry.example.com": {
"auth": "base64编码的username:password"
}
}
}
生成 base64 编码的凭证:
echo -n 'username:password' | base64
常用参数说明
WATCHTOWER_CLEANUP
: 更新后删除旧镜像(默认: false)WATCHTOWER_POLL_INTERVAL
: 检查更新的间隔时间(秒)(默认: 86400, 即24小时)WATCHTOWER_INCLUDE_STOPPED
: 是否包含已停止的容器(默认: false)WATCHTOWER_NOTIFICATION_REPORT
: 发送详细报告(默认: false)WATCHTOWER_TIMEOUT
: 等待容器停止的超时时间(秒)(默认: 10)WATCHTOWER_LABEL_ENABLE
: 只更新设置了com.centurylinklabs.watchtower.enable=true
标签的容器
使用示例
- 只更新特定容器:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower container1 container2
- 立即检查更新(一次性运行):
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once
- 排除特定容器(在 compose.yml 中添加标签):
services:
myservice:
labels:
- "com.centurylinklabs.watchtower.enable=false"
备注
-
Watchtower 默认会更新所有容器,包括自身。如果不想更新自身,可以添加环境变量
WATCHTOWER_NO_RESTART=true
。 -
通过 Cron 表达式设置更新时间:
WATCHTOWER_SCHEDULE=0 0 4 * * * # 每天凌晨4点更新
-
当容器使用默认的 latest 标签时,Watchtower 通过比较镜像的摘要来确定是否有更新,而不仅仅是标签名。
-
为保障系统安全,建议给 Watchtower 容器设置适当的资源限制.