找回密碼
 立即註冊
    查看: 188|回覆: 0

    Docker 容器的更新策略:Watchtower 停止維護之後怎麼辦

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 11:33:34 | 顯示全部樓層 |閱讀模式
    如果你的 compose 檔裡有 `containrrr/watchtower`,請先去看它還起不起得來。

    那個專案在 2025 年 12 月 17 日被維護者封存,最後一個正式版停在 2023 年。而且問題不只是「沒人維護」—— 它內建的 Docker 用戶端版本太舊,在比較新的 Docker Engine 上會直接啟動失敗,連更新自己都做不到。

    症狀很容易被誤判:某天 NAS 或主機更新了 Docker,Watchtower 就安靜地停在那裡。你不會收到通知(因為通知是它發的),容器清單裡它顯示為 restarting 或 exited,而你可能好幾個月都不會注意到。比「沒裝自動更新」更糟的,是「以為裝了但其實沒在跑」。

    比「沒裝自動更新」更糟的,是「以為裝了但其實沒在跑」。

    步驟 1:先確認你現在的狀態

    SSH 進主機:
    1. # 有沒有在跑 watchtower
    2. docker ps -a --filter "name=watchtower" \
    3.   --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
    4. # Docker Engine 的版本
    5. docker version --format '{{.Server.Version}}'
    複製代碼

    你會看到什麼:


    • 完全沒有 watchtower → 很好,直接跳到步驟 3
    • 狀態是 `Up X days`、映像檔是 `containrrr/watchtower` → 它還活著,但是一個已封存的版本。往下看步驟 2
    • 狀態是 `Restarting` 或 `Exited` → 已經死了。看日誌確認:`docker logs watchtower --tail 20`,如果出現類似「client version 1.25 is too old」的訊息,就是前面說的那個原因


    步驟 2:處理掉舊的 Watchtower

    三個選擇,建議第二個。

    2-A:直接移除
    1. docker stop watchtower
    2. docker rm watchtower
    複製代碼

    然後把 compose 檔裡的 `watchtower` 整個區塊刪掉。

    適合的人:容器數量不多(五個以內),而且你本來就會定期看 release notes。更新檢查改用步驟 6 的腳本。

    2-B:換成社群接手的版本(建議)

    有一個維護中的分支:`nickfedor/watchtower`(GitHub 上是 `nicholas-fedor/watchtower`),持續在跟上新的 Docker API。

    compose 裡改一行就好:
    1.   watchtower:
    2.     image: nickfedor/watchtower:1.22.3
    3.     container_name: watchtower
    4.     restart: unless-stopped
    5.     volumes:
    6.       - /var/run/docker.sock:/var/run/docker.sock
    7.     environment:
    8.       - TZ=Asia/Taipei
    9.       # 只通知,不更新
    10.       - WATCHTOWER_MONITOR_ONLY=true
    11.       - WATCHTOWER_SCHEDULE=0 0 9 * * *
    12.       - WATCHTOWER_NOTIFICATION_URL=generic+http://192.168.1.50:8123/api/webhook/docker-updates-請換成你自己的亂碼
    複製代碼
    1. docker compose up -d watchtower
    2. docker compose logs --tail 20 watchtower
    複製代碼

    你會看到什麼:日誌出現版本資訊與 `Scheduling first run`,並列出下一次執行的時間。

    日誌出現 permission denied 相關的訊息:`/var/run/docker.sock` 沒掛進去,或這台主機不允許。

    ⚠ 兩件要知道的事:

    以下還有約 81% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-11-10 00:43 , Processed in 0.125219 second(s), 25 queries .

    快速回覆 返回頂部 返回列表