## 安裝 Watchtower ```shell docker pull Watchtower ``` ## 使用方法 ```shell docker run --detach \ --name watchtower \ --volume /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower ``` 使用剛剛的方法會拉取最新鏡像,但並不會自動刪除舊有鏡像,時間一長就會佔用很大空間,這裡可以使用 `--cleanup` 選項,在更新完舊容器之後自動刪除舊鏡像 ```shell docker run -d \ --name watchtower \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --cleanup ``` ### 設置自動更新檢測頻率 Watchtower 默認是每 5min 檢測一次,如果需要更改週期,可以使用 `--interval`、`-i` 選項 如設定每小時檢測一次: ```shell docker run -d \ --name watchtower \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --cleanup \ -i 3600 ``` `-i 3600`:這裡的 `3600` 是設置的時間週期,單位是**秒** , `3600` 即 1 小時 ### 指定更新檢測時間 除了設置頻率,還可以使用 `--schedule`、`-s` 選項指定時間 如指定每天 UTC+8 時間凌晨 3 點更新。 ```shell docker run -d \ --name watchtower \ --restart always \ -e TZ=Asia/Taipei \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --cleanup \ -s "0 0 3 * * *" ``` 這裡的執行時間為 UTC 時間,如果不指定時區,會比台北的 UTC+8:00 時間晚 8 小時 ### 制定需要更新的容器 如果不想更新所有容器,可以設置指定的容器進行更新 以 `nginx` 和 `netdata` 這兩個容器舉例: ```shell docker run -d \ --name watchtower \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --cleanup \ nginx netdata ``` 這裡指定的容器只需要填寫**容器名**,而不是填寫該容器的**鏡像名** ## 手動更新 如果不想在使用容器時被自動更新打斷,可以使用 Watchtower 進行手動更新 由於是手動更新,Watchtower 只需要用到一次,可以添加 `--rm` 和 `--run-once` 參數,在更新完之後過河拆橋 ### 手動更新所有容器 ```shell docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --cleanup \ --run-once ``` ## 手動更新指定容器 繼續以 `nginx` 和 `netdata` 這兩個容器舉例 ```shell docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --cleanup \ --run-once \ nginx netdata ``` ## 參考 - [使用Watchtower自動更新Docker鏡像和容器 - Docker容器 - 計算機 | 🧂 = 鹽🧂的記事本 = ( ´∀`)ヵヵヵ](https://www.sio.moe/2021/12/18/computer/Docker-Container/Use-Watchtower-to-automatically-update-Docker-images-and-containers/) - [storjlabs/watchtower Tags | Docker Hub](https://hub.docker.com/r/storjlabs/watchtower/tags)