目标:在威联通 NAS 上部署 LobeChat,并用 Watchtower 按计划自动拉取新镜像、清理旧镜像并重启容器。

Compose 示例

version: "3.8"

services:
  lobe-chat:
    image: lobehub/lobe-chat
    container_name: lobe-chat
    restart: always
    ports:
      - "3210:3210"
    environment:
      OPENAI_API_KEY: ${OPENAI_API_KEY}
      OPENAI_PROXY_URL: ${OPENAI_PROXY_URL}
      ACCESS_CODE: ${ACCESS_CODE}
    labels:
      - "com.centurylinklabs.watchtower.enable=true"

  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: always
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --cleanup --label-enable --schedule "0 0 * * * *"

关键点

  • com.centurylinklabs.watchtower.enable=true:只更新被标记的容器。
  • --label-enable:开启按 label 过滤。
  • --cleanup:更新后删除旧镜像,避免 NAS 磁盘被层层占用。
  • restart: always:容器被替换或异常退出后自动拉起。

Watchtower 的 6 字段 cron

Watchtower 使用 Spring 风格:秒 分 时 日 月 星期

  • 0 0 * * * *:每小时整点检查
  • 0 0 1 * * *:每天 01:00
  • 0 */5 * * * *:每 5 分钟

注意:密钥不要写进公开仓库。生产环境用 .env 或 NAS 密钥管理,并限制 3210 仅内网/反代访问。