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 镜像拉取和版本一致性验证这一层。镜像过了,后面仍然要靠日志、备份和权限检查来完成恢复。

相关推荐
jay神23 分钟前
深度学习的优化器应该怎么选?
人工智能·python·深度学习·毕业设计·课程设计
Hello server2 小时前
DeepSeek Harness 深度体验:把「万物皆插件」做到极致的 AI 编程 Agent
人工智能
驴友花雕6 小时前
【花雕动手做】行空板 K10 系列实验之人工智能语音识别小车的10个参考案例
人工智能·单片机·嵌入式硬件·语音识别·行空板 k10 系列实验·花雕动手做·小车的10个参考案例
火山引擎开发者社区8 小时前
DeepSeek-V4 Pro 发布,veStack Day 0 完成模型适配
人工智能
2501_926978338 小时前
AGI 的四种瓶颈:资源型还是发现型--以及DSH的位置
人工智能·经验分享·笔记·ai写作
Q463913498 小时前
线下销售复盘难落地,AI 会话设备能帮上啥忙
人工智能·自然语言处理
ebok.8 小时前
国产大模型落地业务系统的优选载体:京微智枢信创 AI 业务支撑平台
大数据·人工智能·低代码·ai
虎头金猫8 小时前
如何在群晖NAS上通过Docker部署CloudSaver?群晖部署CloudSaver教程|聚合资源搜索并实现远程访问
运维·服务器·网络·python·docker·容器·pandas
wujian83118 小时前
怎么用文心生成word文档?从格式错乱到智能导出,AI导出鸭让创作再无后顾之忧
人工智能·ai·word·豆包·deepseek·ai导出鸭
动物园猫9 小时前
猪危险行为目标检测数据集:3类别、5,000+张图像 | 目标检测
人工智能·目标检测·计算机视觉