Immich Docker Compose 升级后相册索引卡住排查:GHCR 镜像、数据库和存储权限

环境:

  • Immich:Docker Compose 部署
  • 服务:immich-serverimmich-machine-learningimmich_postgresimmich_redis
  • 现象:docker compose pull && docker compose up -d 后页面能打开,但新照片不生成缩略图,人脸识别和重复照片任务没有明显进度
  • 排查目标:先确认镜像版本一致,再看数据库迁移、UPLOAD_LOCATION、机器学习服务和任务队列

本文不讨论首次安装,只记录升级后相册索引卡住的排查顺序。

1. 先确认 Compose 文件和版本

Immich 官方建议使用 Docker Compose 跑生产环境。升级时,应先阅读 release notes 和 breaking changes,再更新 .env 里的 IMMICH_VERSION,最后在 docker-compose.yml 所在目录执行:

bash 复制代码
docker compose pull && docker compose up -d

先看当前配置:

bash 复制代码
grep -n "IMMICH_VERSION" .env
docker compose config | sed -n '/image:/p'
docker compose ps

如果 .env 里写的是:

env 复制代码
IMMICH_VERSION=v2

说明会跟随 v2 主版本。如果你在升级前后需要精确回滚,建议在维护窗口内记录具体版本号和当前 docker-compose.yml

2. 单独验证 GHCR 镜像入口

Immich 当前 Compose 文件里,常见镜像来源包括:

服务 镜像来源
immich-server GHCR
immich-machine-learning GHCR
database GHCR 上的 Immich Postgres 镜像
redis Docker Hub / Valkey

如果环境访问 GHCR 不稳定,升级过程中可能出现镜像没有完整拉取、不同节点版本不一致、重启后仍旧跑旧镜像等情况。可以先把镜像层拿出来验证。

bash 复制代码
docker pull ghcr.1ms.run/immich-app/immich-server:v2
docker pull ghcr.1ms.run/immich-app/immich-machine-learning:v2
docker pull ghcr.1ms.run/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0

这里使用 ghcr.1ms.run 是为了先验证 GHCR 镜像入口。毫秒镜像解决的是镜像拉取这一层,不负责修复数据库、索引任务或存储权限。

如果要在 Compose 中使用同名入口,可以把相关 image: 改成:

yaml 复制代码
services:
  immich-server:
    image: ghcr.1ms.run/immich-app/immich-server:${IMMICH_VERSION:-v2}

  immich-machine-learning:
    image: ghcr.1ms.run/immich-app/immich-machine-learning:${IMMICH_VERSION:-v2}

  database:
    image: ghcr.1ms.run/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0

改完后重新拉取:

bash 复制代码
docker compose pull
docker compose up -d
docker compose ps

3. 看数据库迁移和 VectorChord 日志

相册索引卡住,不一定是任务挂了。Immich 官方升级文档提到,迁移到 VectorChord 时,Reindexing clip_indexReindexing face_index 在照片量大或硬件弱的环境里可能持续一段时间。

先看 server 和 database 日志:

bash 复制代码
docker compose logs --tail=200 immich-server
docker compose logs --tail=200 database

如果你用的是较新的官方 Compose 文件,数据库镜像通常是类似:

text 复制代码
ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0

排查时注意区分:

日志状态 处理
只有 Reindexing clip_index / face_index,无错误 等待,观察 CPU/IO
数据库连接失败 .env、容器网络、Postgres 状态
迁移报错 停止反复重启,先保留日志和备份
版本不匹配 检查 IMMICH_VERSION 和实际镜像

4. 确认备份不是只有数据库

Immich 官方备份文档强调:数据库保存文件路径和用户元数据,数据库备份不包含照片和视频原文件。完整备份至少包含两类内容:

内容 位置
数据库备份 UPLOAD_LOCATION/backups 或自定义备份路径
原始文件和派生文件 UPLOAD_LOCATION 下的 libraryuploadthumbsencoded-videoprofile 等目录

升级前建议先列目录:

bash 复制代码
grep -n "UPLOAD_LOCATION\\|DB_DATA_LOCATION" .env
ls -lah "$UPLOAD_LOCATION"
ls -lah "$UPLOAD_LOCATION/backups"

如果 UPLOAD_LOCATION 是相对路径,例如 ./library,要确认当前命令所在目录就是 Compose 目录,否则很容易误挂到另一个空目录。

5. 排查存储权限和容器内路径

升级后缩略图不生成,常见原因是容器里看到的 /data 和宿主机实际目录不一致,或权限变化导致写不进去。

bash 复制代码
docker compose exec immich-server sh -lc 'id && ls -lah /data | head'
docker compose exec immich-server sh -lc 'touch /data/.write-test && rm /data/.write-test'

如果这里报 permission denied,就不要继续排机器学习服务。先修挂载和权限。

常见检查点:

检查点 命令或判断
宿主机目录是否存在 ls -lah ./library
容器内是否可见 docker compose exec immich-server ls -lah /data
是否可写 touch /data/.write-test
外置盘是否挂载 `mount
NAS 权限是否变化 查看共享文件夹 ACL / Docker 用户权限

6. 单独看机器学习服务

如果缩略图正常,但人脸识别、智能搜索、重复照片识别异常,可以看 immich-machine-learning

bash 复制代码
docker compose logs --tail=200 immich-machine-learning
docker compose exec immich-machine-learning sh -lc 'ls -lah /cache | head'

如果你启用了硬件加速,还要核对 Compose 中的 ML 镜像 tag 是否和加速类型匹配,例如 -cuda-openvino 等后缀。不要把 ML 容器报错直接当成 server 升级失败。

7. 最后一遍恢复顺序

建议按照这个顺序走:

  1. 固定 IMMICH_VERSION,记录升级前版本。
  2. 备份数据库和 UPLOAD_LOCATION
  3. 单独验证 GHCR / Docker Hub 镜像入口。
  4. 执行 docker compose pull && docker compose up -d
  5. immich-serverdatabase 迁移日志。
  6. 检查 /data 写入权限。
  7. 单独排查 machine learning 和任务队列。
  8. 没有错误但在重建索引时,给它时间。

总结

Immich 升级后相册索引卡住,优先按层排:镜像版本、数据库迁移、存储权限、机器学习服务、后台任务。毫秒镜像只适合放在 GHCR 镜像拉取和版本一致性验证这一层。镜像过了,后面仍然要靠日志、备份和权限检查来完成恢复。

相关推荐
装不满的克莱因瓶13 小时前
掌握基于YOLO v5实现车牌目标检测任务的完整流程——从数据到部署的工业级实践
人工智能·python·深度学习·yolo·目标检测·计算机视觉·目标跟踪
叫我:松哥13 小时前
基于Flask的在线考试刷题系统设计与实现,集智能练习、过程追踪、深度分析与个性化引导
数据库·人工智能·后端·python·flask·boostrap
Rain50913 小时前
2.3. 安全配置:环境变量与 API 密钥管理
前端·人工智能·后端·安全·ai·node.js·ai编程
用户9385156350713 小时前
HTML5 Canvas 从入门到AI驱动游戏开发:手把手教你用原生JS打造飞机游戏与数据可视化
前端·javascript·人工智能
货拉拉技术13 小时前
Huolala Figma MCP 原理与实践
人工智能·前端框架·html
劈星斩月13 小时前
从“画图”到“算数”:GPU如何站上AI时代的C位
人工智能·gpu
hongyucai13 小时前
OPENPi模型源码AI解读
人工智能
果丁智能13 小时前
物联网智能锁赋能网约房与民宿:身份核验、远程授权的技术落地与成本优化方案
人工智能·物联网·智能家居
科技每日热闻13 小时前
618 AI显示器选购指南!爱攻AGON AI定制芯片电竞显示器AG277UX,适合哪些玩家?
人工智能·科技·游戏·计算机外设
初圣魔门首席弟子13 小时前
AI Agent 核心原理:工具调用(Function Calling)完整工作流程详解
前端·数据库·人工智能