如何檢查 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.pswp.cn/diannao/82006.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82006.shtml
英文地址,請注明出處:http://en.pswp.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;與其他路由…