想像一下,你是一位辛勤的開發者或 DevOps 工程師,負責管理數十個甚至數百個 Docker 容器。每次有新的映像檔版本釋出,你就必須手動登入、拉取最新映像檔、停止舊容器、然後啟動新容器。這不僅耗時費力,還容易出錯,如果長期不更新我們使用的容器映像檔,甚至可能讓你的應用程式暴露於過時軟體帶來的安全風險中。
有沒有一種方法,能讓這些繁瑣的更新工作自動化,讓你的容器始終保持在最新、最安全的狀態?
答案就是:Watchtower。
Watchtower 是一個巧妙的工具,它能自動監控你的 Docker 容器所使用的映像檔,並在偵測到新版本時,自動執行更新和重啟。它就像一個忠實的守衛,確保你的數位堡壘永不失守。
Watchtower 的核心優勢
Watchtower 的設計哲學是簡潔而高效,它透過幾個巧妙的特點,徹底改變了我們的容器管理方式:
容器內的容器
巧妙的自我管理 Watchtower 最令人稱奇的設計之一,就是它本身也作為一個 Docker 容器運行。這意味著你不需要在主機上安裝額外的軟體或額外的設定,只需像啟動其他任何容器一樣啟動 Watchtower 即可。這種「容器內的容器」模式不僅簡化了部署,也讓 Watchtower 能夠與 Docker 環境完美整合,以最原生的方式管理你的其他容器。
智慧型自動化
你可能會擔心自動更新會導致服務中斷或資料遺失。然而,Watchtower 並非盲目地執行更新。它支援「優雅關閉」(graceful shutdown),在重啟容器前,會先向舊容器發送 SIGTERM 信號,給予應用程式足夠的時間來完成當前任務並妥善關閉。如果容器未能及時響應,才會發送 SIGKILL。
安全與穩定
在網路安全威脅日益嚴峻的今天,保持軟體更新是防禦攻擊的關鍵一環。Watchtower 確保你的應用程式始終運行最新版本的映像檔,這意味著你可以即時獲得最新的安全修補程式和錯誤修正。這不僅大大降低了潛在的安全漏洞,也提升了應用程式的整體穩定性。
自我更新與永續發展
這是一個非常特別的特點:Watchtower 甚至能夠更新自己!你可以配置 Watchtower 來監控其自身的映像檔,並在有新版本可用時自動更新。這確保了 Watchtower 這個更新工具本身也總是運行在最新、最佳化的狀態。
實戰部署 – 在 NAS 或 Linux 上安裝 Watchtower
對於 QNAP NAS 用戶來說,我們可以透過 Container Station(容器工作站)來部署 Watchtower。這裡提供兩種主流方法:一種是使用 Container Station 的圖形化介面,另一種是透過 Portainer 的 Stacks 功能,這也是滿推薦的方式。後者是我們管理 Linux 伺服器上容器常見的安裝方式,採用 Portainer 來管理也是一個方式,以及大量使用 Docker Compose 了。
方法一:使用 QNAP Container Station GUI (視覺化建立)
這是最直觀的方法,適合剛接觸 Docker 的使用者。
開啟 Container Station:登入 QTS,開啟 Container Station 3.0 或更新版本。
建立容器:在左側選單選擇「建立」(Create),在搜尋框中輸入 containrrr/watchtower 並按搜尋。
選擇映像檔:找到官方的 containrrr/watchtower 映像檔(通常是第一個),點擊「部署」,選最新 Latest 的映像檔。

基本設定:
名稱:自訂一個名稱,例如 watchtower 或 watchtower -1 。
自動啟動:建議勾選。
進入進階設定:點擊下方的「進階設定」。
掛載 Docker Socket (關鍵步驟):
「儲存空間」設定
在「磁碟區」(Volumes) 區塊,點擊「掛載本機目錄」。
主機路徑 (Host):輸入 /var/run/docker.sock
容器路徑 (Container):輸入 /var/run/docker.sock
說明:這一步是授權 Watchtower 容器去存取和管理主機上的 Docker 服務。

設定重啟策略:
選擇「總是」(Always) 或「除非停止」(Unless Stopped),確保 NAS 重啟後 Watchtower 也能自動運行。
建立:確認設定無誤後,點擊「建立」。

容器啟動後,Watchtower 就會開始在背景運作,預設會每天定時檢查所有正在運行的容器是否有新版本。
方法二:透過 Portainer Stacks 部署 (推薦)
如果你在 QNAP 或你的 Linux 伺服器上已經安裝了 Portainer 來管理 Docker,使用「Stacks」(堆疊)功能來部署 Watchtower 會是更專業且易於管理的方式。Stacks 實際上就是使用 docker-compose YAML 檔案。
登入 Portainer:開啟你的 Portainer 管理介面。
選擇環境:選擇你的 QNAP Docker 環境 (通常是 local 或 primary)。
進入 Stacks:在左側選單點選「Stacks」(堆疊)。
新增 Stack:點擊右上角的「Add Stack」(新增堆疊)。
設定 Stack:
Name:輸入一個名稱,例如 watchtower_stack。
Web editor (網頁編輯器):貼上下方的 YAML 內容。
docker-compose.yml 範例:
version: "3"
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# command: --schedule "0 0 4 * * *" # 可選:指定排程,例如每天凌晨 4 點執行
command: --cleanup # 可選:自動刪除舊的映像檔,這個建議要開,避免 Docker 系統中留一堆舊的映像檔占空間
restart: unless-stopped部署 Stack:點擊頁面底部的「Deploy the stack」(部署堆疊)。

Portainer 會自動拉取映像檔並根據我們撰寫的 YAML 設定檔來啟動 Watchtower。使用 Stacks 的好處是,未來修改設定(例如調整排程)非常方便,只需回到 Stack 編輯 YAML 即可。
CyberQ 重點提示:
QNAP Container Station 內的「應用程式」->「建立應用程式」功能,
其實也是一個內建的 docker-compose 介面。
你也可以將上述 YAML 貼到那裡,其效果與 Portainer Stacks 相同。

客製化 Watchtower 進行精準控制更新
預設情況下,Watchtower 會嘗試更新所有正在運行的容器。但在某些情況下,你可能只想更新特定容器,或排除某些敏感的應用程式(例如資料庫)。
這可以透過 Command(命令) 或 Labels(標籤) 來實現。
Command (在 YAML 中修改 command 行):
設定排程:預設是每天檢查一次。你可以使用 Cron 表達式自訂時間。 command: –schedule “0 0 4 * * *” (每天凌晨 4 點執行)
清理舊映像檔:更新後自動刪除舊的映像檔,釋放空間。 command: –cleanup
僅更新特定容器:讓 Watchtower 只監控和更新你指定的容器。 command: unifi-controller pihole (只更新名為 “unifi-controller” 和 “pihole” 的容器)
組合使用: command: –schedule “0 0 4 * * *” –cleanup unifi-controller pihole
Labels (在「被更新」的容器上設定): 這是更靈活的管理方式。你可以在其他容器(例如你的 Portainer 或 AdGuard Home)上設定標籤,來告訴 Watchtower 該如何對待它。
排除更新:在你 不想 被自動更新的容器上加入此標籤: com.centurylinklabs.watchtower.enable=false
納入更新(白名單模式):
首先,啟動 Watchtower 時加入 –label-enable 參數 (例如 command: –label-enable)。
這會使 Watchtower 預設不更新任何容器。
然後,在你希望被自動更新的容器上加入此標籤: com.centurylinklabs.watchtower.enable=true
CyberQ 推薦 Watchtower 必裝
Watchtower 不僅僅是一個容器更新工具,它更是一種解放 DevOps 人力、提升系統韌性與安全性的策略性部署。
透過在 QNAP NAS 或維運中的 Linux Docker 伺服器上簡單的設定,它就能將繁瑣的手動更新工作轉化為無聲無息的背景自動化,讓你的團隊可以專注於更有價值的開發工作。
當你的 Docker 容器能夠持續自我更新時,你的數位基礎設施將變得更安全與穩定。
最後,順便要提醒的是,安裝之後,如果沒有指定時間,通常在 24 小時候就會進行 WatchTower 的自動更新流程,請確認你的容器服務一切都正常,設定檔也沒有受影響,要排除不更新的容器要先指定好。
本文題圖由 ComfyUI 搭配本地端 AI 模型生成












