本文最后更新于 2024-03-20,文章原本内容可能已经过时,请查看是否有更新内容。

前言

由于substore项目更新实在太勤快了,懒得每次手动去更新了,所以重新搭建了watchtower

什么是watchtower?

Watchtower 是一个用于 Docker 的自动更新工具,它可以帮助自动更新运行在 Docker 容器中的应用程序。它通过定期检查 Docker 容器使用的镜像的新版本来工作。如果发现了镜像的新版本,Watchtower 会自动下载这个新版本的镜像,并用它来重新启动容器,从而达到自动更新应用程序的目的。

使用 Watchtower,开发人员和系统管理员可以确保他们的 Docker 容器总是运行最新版本的应用程序,而无需手动下载镜像和重启容器。这对于保持软件的安全性和稳定性至关重要,尤其是在需要频繁更新的环境中。

Watchtower 的使用通常很简单,只需运行一个 Watchtower 容器,并在启动时指定要监控更新的容器。Watchtower 还支持多种配置选项,如指定检查更新的频率、限制在特定时间段内执行更新等,以满足不同的使用需求。

本文将使用docker compose搭建watchtower,目的是方便更新substore

substore自建教程看这里

搭建watchtower

创建配置

mkdir /root/watchtower 

cd /root/watchtower

cat > /root/watchtower/docker-compose.yml << EOF
version: "3.8" 
services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - WATCHTOWER_CLEANUP=true      # 更新后移除旧的镜像
      - WATCHTOWER_SCHEDULE=0 */6 * * *      # 设置 cron 定时任务
      - WATCHTOWER_LABEL_ENABLE=true       # 启用标签过滤
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
EOF

⚠️注意,我这里是启用了标签过滤

也就是- WATCHTOWER_LABEL_ENABLE=true 这个参数
因为我这台vps上不止搭建了substore,还有其他docker项目,我只希望watchtower自动更新substore,而不更新其他的项目,所以加了这个参数

如果你需要所有的docker项目都自动更新,把这个参数删除即可

cd /root/watchtower && docker compose up -d

现在watchtower就已经搭建完成了

但是如果你启用了- WATCHTOWER_LABEL_ENABLE=true # 启用标签过滤 这个参数,那还没完

你得在需要自动更新的docker项目的配置中也加一个标记参数

更改substore配置

根据搭建substore配置文件更改

原配置文件为

version: "3.8"
services:
  sub-store:
    image: xream/sub-store:latest
    container_name: sub
    restart: always
    volumes:
      - /root/sub:/opt/app/data
    environment:
      - SUB_STORE_FRONTEND_BACKEND_PATH=/xxx  # xxx替换成下面的网站生成的20位随机数字字母密码,保存下来,最后要用
      # <https://1password.com/zh-cn/password-generator>
      # 这个网站快速快速帮你随机出来
      - SUB_STORE_CRON=1 0 * * *      # 定时上传"同步配置",可整行删除
      - SUB_STORE_PUSH_SERVICE=https://api.day.app/XXXXXXXXXXXX/[推送标题]/[推送内容]?group=SubStore&autoCopy=1&isArchive=1&sound=shake&level=timeSensitive&icon=https%3A%2F%2Fraw.githubusercontent.com%2F58xinian%2Ficon%2Fmaster%2FSub-Store1.png     # bark推送,没有的话要整行删除
    ports:
      - 3001:3001
    stdin_open: true
    tty: true


需要加一个标记参数

    labels:
      - com.centurylinklabs.watchtower.enable=true

那么更改完的配置文件为

version: "3.8"
services:
  sub-store:
    image: xream/sub-store:latest
    container_name: sub
    restart: always
    volumes:
      - /root/sub:/opt/app/data
    environment:
      - SUB_STORE_FRONTEND_BACKEND_PATH=/xxx  # xxx替换成下面的网站生成的20位随机数字字母密码,保存下来,最后要用
      # <https://1password.com/zh-cn/password-generator>
      # 这个网站快速快速帮你随机出来
      - SUB_STORE_CRON=1 0 * * *      # 定时上传"同步配置",可整行删除
      - SUB_STORE_PUSH_SERVICE=https://api.day.app/XXXXXXXXXXXX/[推送标题]/[推送内容]?group=SubStore&autoCopy=1&isArchive=1&sound=shake&level=timeSensitive&icon=https%3A%2F%2Fraw.githubusercontent.com%2F58xinian%2Ficon%2Fmaster%2FSub-Store1.png     # bark推送,没有的话要整行删除
    ports:
      - 3001:3001
    stdin_open: true
    tty: true
    labels:
      - com.centurylinklabs.watchtower.enable=true


然后重新搭建sub即可

docker stop sub

docker rm sub

docker compose up -d  # 要到你自己的sub的docker-compose.yml文件所在文件夹

那么现在加了这个标记的substore项目将被watchtower自动更新,其他的没有添加的将不受影响

运行图

补图

图中是成功检测到的一次substore更新