如何检查 Watchtower 是否正常工作及更新未生效的排查方法【日常排错】

文章目录

  • 前言
  • 一、验证 Watchtower 是否正在运行
    • 1. 检查 Watchtower 容器状态
    • 2. 查看 Watchtower 日志
  • 二、检查5分钟间隔设置是否正确
    • 1. 确认启动命令
    • 2. 验证环境变量
  • 三、排查更新未生效的原因
    • 1. 检查是否有镜像更新
    • 2. 检查容器标签
    • 3. 检查监控范围
  • 四、测试 Watchtower 功能
    • 1. 手动触发检查🎯
    • 2. 创建测试容器
  • 五、常见问题解决方案
    • 1. 时间间隔不生效
    • 2. Watchtower 完全不工作
  • 六、推荐的生产环境监控方案
  • 七、分析日志
    • 1. 阿里云私有仓库认证失败(主要问题)
    • 2. 解决方案
    • 3. 问题解决


前言

写这篇文章主要记录一次实际生产环境遇到的问题。起因是公司有两个镜像库,一个是无需认证的公共镜像库,一个是需要账号密码认证的私有镜像库。都通过docker + watchtower 实现自动容器更新,但是私有库死活不生效。下面记录了排查过程。我这里是用了 5分钟 的定时检查。

虽然下文有很多方法都不是解决本次事故的原因,但是如果你不是站在 上帝视角你又怎么能知道到底是因为什么原因引起的呢?所以我把排查方法都罗列出来了。


一、验证 Watchtower 是否正在运行

1. 检查 Watchtower 容器状态

docker ps -f name=watchtower

正常应该看到类似输出:

CONTAINER ID   IMAGE                       COMMAND        CREATED       STATUS       PORTS     NAMES
a1b2c3d4e5f6   containrrr/watchtower:latest   "/watchtower"   2 days ago    Up 2 days             watchtower

如果 STATUS 不是 "Up" ,说明容器没有正常运行。

2. 查看 Watchtower 日志

docker logs watchtower

正常运行的 Watchtower 会有类似这样的周期性日志:

time="2023-05-01T12:00:00Z" level=info msg="Checking for new images"
time="2023-05-01T12:00:01Z" level=info msg="No new images found for nginx"

二、检查5分钟间隔设置是否正确

1. 确认启动命令

你的启动命令应该包含类似这样的环境变量设置:

docker run -d \--name watchtower \-v /var/run/docker.sock:/var/run/docker.sock \-e WATCHTOWER_POLL_INTERVAL=300 \  # 300秒=5分钟containrrr/watchtower

常见错误:

  • 拼写错误:WATCHTOWER(错误) vs WATCHTOWER(正确)
  • 值不是秒数:应该直接写300(秒),而不是"5m"或"5 minutes"

2. 验证环境变量

docker inspect watchtower | grep -i poll_interval

应该能看到类似:

"WATCHTOWER_POLL_INTERVAL=300"

三、排查更新未生效的原因

1. 检查是否有镜像更新

Watchtower 只会在镜像仓库有新版本时才会更新。确认你的镜像确实有新版本:

docker pull 你的镜像名:latest
docker images | grep 你的镜像名

2. 检查容器标签

某些标签会阻止 Watchtower 更新:

docker inspect 你的容器名 | grep -i watchtower.enable

如果看到 "com.centurylinklabs.watchtower.enable=false",说明该容器被排除在更新外。

3. 检查监控范围

默认 Watchtower 监控所有容器,但如果你指定了特定容器,确认包含了你想要更新的容器:

docker inspect watchtower | grep -A5 "Cmd"

四、测试 Watchtower 功能

1. 手动触发检查🎯

docker exec watchtower /watchtower --run-once

这会立即执行一次检查更新操作,查看日志确认:

docker logs watchtower --tail 50

2. 创建测试容器

启动一个专门用于测试的容器:

docker run -d --name test-watchtower alpine tail -f /dev/null

然后推送一个新版本的 alpine 镜像到仓库,观察 Watchtower 是否会更新这个测试容器。

五、常见问题解决方案

1. 时间间隔不生效

可能原因:

  • 环境变量名称拼写错误
  • 值格式不正确(必须是秒数)
  • Watchtower版本过旧

解决方案:

# 停止并删除旧容器
docker stop watchtower && docker rm watchtower# 使用最新版Watchtower并正确设置
docker run -d \--name watchtower \-v /var/run/docker.sock:/var/run/docker.sock \-e WATCHTOWER_POLL_INTERVAL=300 \containrrr/watchtower:latest

2. Watchtower 完全不工作

检查点:

  • 确保 Docker 守护进程正常运行
  • 检查 /var/run/docker.sock 的权限
  • 尝试使用 --debug 模式获取更多日志信息:
docker run -d \--name watchtower \-v /var/run/docker.sock:/var/run/docker.sock \-e WATCHTOWER_POLL_INTERVAL=300 \-e WATCHTOWER_DEBUG=true \containrrr/watchtower

然后查看详细日志:📃

docker logs watchtower

六、推荐的生产环境监控方案

对于生产环境,建议配置通知功能以便及时了解更新情况:

docker run -d \--name watchtower \-v /var/run/docker.sock:/var/run/docker.sock \-e WATCHTOWER_POLL_INTERVAL=300 \-e WATCHTOWER_NOTIFICATIONS=email \-e WATCHTOWER_NOTIFICATION_EMAIL_FROM=your@email.com \-e WATCHTOWER_NOTIFICATION_EMAIL_TO=admin@email.com \-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.email.com \-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=your@email.com \-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=yourpassword \containrrr/watchtower

通过以上步骤,你应该能够确定为什么5分钟更新间隔没有生效,并根据具体情况解决问题。如果问题仍然存在,可以提供更多日志信息以便进一步诊断。

七、分析日志

上面方法我都试了,然而还是不行,我就把日志拷贝出来分析了下,后来恍然大悟,有没有可能是我们拉取镜像时没有登录授权,因为这个镜像库是私有的。一拍脑袋,没错。日志如下:

time="2025-05-07T07:36:21Z" level=debug msg="Got response to challenge request" header="Bearer realm=\"https://dockerauth.cn-hangzhou.aliyuncs.com/auth\",service=\"registry.aliyuncs.com:cn-beijing:26842\"" status="401 Unauthorized"

1. 阿里云私有仓库认证失败(主要问题)

多个容器出现类似错误:

time="2025-05-07T07:36:21Z" level=debug msg="No credentials for registry.cn-beijing.aliyuncs.com found"
time="2025-05-07T07:36:21Z" level=debug msg="Error pulling image registry.cn-beijing.aliyuncs.com/itdos/os.itdos.com:latest, Error response from daemon: pull access denied..."

问题分析:

  • 所有来自 registry.cn-beijing.aliyuncs.com 的镜像都无法拉取
  • Watchtower 没有配置私有仓库的认证信息
  • 错误明确显示 "pull access denied"

根本原因:
私有仓库需要登录凭证,但 Watchtower 未配置这些凭证。

2. 解决方案

方案1:配置 Watchtower 使用私有仓库凭证
方法A:通过环境变量传递凭证

docker run -d \--name watchtower \-v /var/run/docker.sock:/var/run/docker.sock \-e REPO_USER=your_username \-e REPO_PASS=your_password \-e WATCHTOWER_POLL_INTERVAL=300 \containrrr/watchtower \--debug

方法B:使用 Docker 配置文件(推荐)
首先登录私有仓库:

docker login registry.cn-beijing.aliyuncs.com

然后启动 Watchtower 并挂载 Docker 配置文件:

docker run -d \--name watchtower \-v /var/run/docker.sock:/var/run/docker.sock \-v $HOME/.docker/config.json:/config.json \-e WATCHTOWER_POLL_INTERVAL=300 \containrrr/watchtower

3. 问题解决

我用了第一种方法,通过环境变量传递凭证

docker run -d \--name watchtower \-v /var/run/docker.sock:/var/run/docker.sock \-e REPO_USER=your_username \-e REPO_PASS=your_password \-e WATCHTOWER_POLL_INTERVAL=300 \containrrr/watchtower \--debug

果然问题解决✅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82006.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宝塔面板,删除项目后还能通过域名进行访问

场景:在阿里云宝塔面板中,删除了之前建立的html项目,通过之前绑定的域名还是可以访问,又把项目的目录文件删除,发现还是不行 又清理了浏览器缓存,但还是有这个问题通过该域名重新创建一个html项目&#xff…

多层PCB SMT贴装全流程指南:从物料准备到回流焊工艺控制

在电子制造领域,多层PCB板元器件贴片是一项重要的技术操作。本文将详细介绍多层PCB板元器件贴片的操作流程和注意事项,帮助您更好地理解和掌握这项技术。 一、准备阶段 在进行多层PCB板元器件贴片操作前,需要做好以下准备工作: 1.…

PAT(最近)

1022 D进制的AB - PAT (Basic Level) Practice (中文) 加减位置调换 本来以为就是简单的 十进制转换为一个长的字符串 没想到在那个拼接字符串的时候 只需要简单的 加减位置调换就可以 避免使用麻烦的翻转函数 import java.util.Scanner; public clas…

【Harbor v2.13.0 详细安装步骤 安装证书启用 HTTPS】

Harbor v2.13.0 详细安装步骤(启用 HTTPS) 1. 环境准备 系统要求:至少 4GB 内存,100GB 磁盘空间。 已安装组件: Docker(版本 ≥ 20.10)Docker Compose(版本 ≥ v2.0) 域…

以pytest_addoption 为例,讲解pytest框架中钩子函数的应用

钩子函数(Hook Function)的概念 钩子函数(Hook Function)是软件框架中预定义的回调接口,允许开发者在程序执行的特定阶段插入自定义逻辑,以扩展或修改框架的默认行为。在 pytest 中,钩子函数覆…

合并两个有序链表 - 简单

************* C topic: 21. 合并两个有序链表 - 力扣(LeetCode) ************* Give the topic an inspection. Hi, guys, how is your holiday break? I went to 黄山 in the past few days. The mount Huang is really beautiful. 天都峰 is real…

13.Spring boot中使用Actuator 监控

13.Spring boot中使用Actuator 监控 Spring Boot Actuator 是 Spring Boot 提供的一个强大的监控和管理工具,它通过暴露各种端点(Endpoints)来提供应用程序的运行时信息。这些端点可以帮助开发者和管理员监控应用程序的健康状况、性能指标、…

Python+Scrapy跨境电商爬虫实战:从亚马逊/沃尔玛数据采集到反爬攻克(附Pangolin API高效方案)

从零实战到反爬攻克,揭秘跨境数据抓取全流程与Pangolin Scrape API终极方案 在当今数据驱动的跨境电商时代,谁掌握了优质的市场数据,谁就掌握了成功的关键。随着全球电商市场规模持续扩大(据Statista最新报告显示,2025…

0基础学习鸿蒙开发-HarmonyOS4

一、初识 1. 开发工具 官网 开发-HarmonyOS NEXT鸿蒙应用开发平台-华为开发者联盟 2. ArkTS 二、TypeScript 基本语法 1.变量声明 2. 条件控制 注意 在TypeScrips中 空字符串数字0、null、undefined 都坡认为是false 其它值则为true if (num) {// num 非空执行 } 3. 循环迭…

深度学习中常用的符号表达式

在论文写作过程中,常常涉及到一些关键的符号的表达,为了更加规范常用的一些符号表达,现将其总结如下(该文件会持续性更新): 数字 x x x : 标量 x \mathbf{x} x : 向量 X \mathbf{X} X : 矩阵 X \mathsf{X}…

react naive 网络框架源码解析

本文取 react native 两个区别很大的版本做分析(0.76.5、0.53.3) 一、0.76.5 版fetch 全流程排查 1、JS 端的实现 随手写一个fetch,点开。 我们这里常用的还是手机端,因此选择 react-native,react-native-windows …

OpenCV 图形API(81)图像与通道拼接函数-----透视变换函数warpPerspective()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对图像应用透视变换。 函数 warpPerspective 使用指定的矩阵对源图像进行变换: dst ( x , y ) src ( M 11 x M 12 y M 13 M 31 x…

深度学习在油气地震资料反卷积中的应用

深度学习在油气地震资料反卷积中的应用 基本原理 在油气地震勘探中,反卷积(Deconvolution)是一种重要的信号处理技术,用于提高地震资料的分辨率。传统方法(如维纳滤波、预测反卷积等)存在对噪声敏感、假设条件严格等局限。深度学习方法通过数据驱动的方…

Java开发者面试实录:微服务架构与Spring Cloud的应用

面试场景 面试官: 请介绍一下你的基本情况。 程序员: 大家好,我叫张小明,今年27岁,硕士学历,拥有5年的Java后端开发经验。主要负责基于Spring Boot开发企业级应用,以及微服务架构的设计和实现。 面试官: 好的&#…

​Spring + Shiro 整合的核心要点及详细实现说明

在 Spring 项目中集成 Apache Shiro 可以实现轻量级的安全控制(认证、授权、会话管理等)。以下是 ​Spring Shiro 整合的核心要点及详细实现说明: 一、Spring 与 Shiro 整合的核心组件 ​组件​​作用​ShiroFilterFactoryBean创建 Shiro 过…

网络编程核心技术解析:从Socket基础到实战开发

网络编程核心技术解析:从Socket基础到实战开发 一、Socket编程核心基础 1. 主机字节序与网络字节序:数据传输的统一语言 在计算机系统中,不同架构对多字节数据的存储顺序存在差异,而网络通信需要统一的字节序标准,这…

SQLark可以支持PostgreSQL了,有哪些新功能?

SQLark(百灵连接)是一款国产的数据库开发和管理工具,用于快速查询、创建和管理不同类型的数据库系统,支持达梦、Oracle 和 MySQL 数据库。 最新发布的 SQLark V3.4 版本新增了对 PostgreSQL 数据库的支持。我试用了一下&#xff…

【全面解析】Poco C++ Libraries 模块详解与使用指南

Poco(The Portable Components) 是一套现代 C 的跨平台开发库,广泛应用于嵌入式系统、服务端程序、工业控制和 AI 后端服务等领域。其设计理念类似于 Java 的标准库,为 C 提供“标准的非标准功能”。 本篇文章将带你全面了解 Poco…

Vue+tdesign t-input-number 设置长度和显示X号

一、需求 Vuetdesign t-input-number 想要设置input的maxlen和显示X号 二、实现 t-input&#xff0c;可以直接使用maxlength和clearable属性 <t-input v-model"value" clearable maxlength10 placeholder"请输入" clear"onClear" blur&q…

(Go Gin)Gin学习笔记(二):路由配置、基本路由、表单参数、上传单个文件、上传多个文件、浅扒路由原理

1. 路由 gin 框架中采用的路优酷是基于httprouter做的 HttpRouter 是一个高性能的 HTTP 请求路由器&#xff0c;适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用&#xff0c;特别适合需要高性能和简单路由的应用场景。 主要特点 显式匹配&#xff1a;与其他路由…