这次在一台 ECS 上复现 Immich Docker Compose 升级后的恢复检查。
现象是:升级命令执行完后,容器看起来都在运行,Web 页面也能访问,但相册索引和缩略图任务没有及时恢复。
docker compose pull && docker compose up -d
docker compose ps
1. 固定版本和配置文件
先记录 .env 和 Compose 配置:
grep -n "IMMICH_VERSION\\|UPLOAD_LOCATION\\|DB_DATA_LOCATION" .env
docker compose config | sed -n '/image:/p'
如果是生产相册服务,不建议升级前后不留记录。至少备份:
cp docker-compose.yml docker-compose.yml.$(date +%Y%m%d-%H%M)
cp .env .env.$(date +%Y%m%d-%H%M)
2. 预检 GHCR 镜像
Immich 的 server、machine learning 和官方 Postgres 镜像都涉及 GHCR。ECS 上如果拉取不稳定,我会先用同名入口验证:
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
镜像能拉通后,再执行:
docker compose pull
docker compose up -d
3. 看数据库迁移
相册索引卡住时,先看日志:
docker compose logs --tail=200 immich-server
docker compose logs --tail=200 database
如果看到索引重建相关日志但没有错误,先观察 CPU、磁盘 IO 和数据库容器状态。不要反复重启。
docker stats
docker compose ps database
4. 检查磁盘和挂载
ECS 上常见问题是数据盘挂载路径变化,或者 UPLOAD_LOCATION 变成相对路径后指向了错误目录。
df -h
grep -n "UPLOAD_LOCATION\\|DB_DATA_LOCATION" .env
docker compose exec immich-server sh -lc 'ls -lah /data | head'
docker compose exec immich-server sh -lc 'touch /data/.write-test && rm /data/.write-test'
如果 /data 不能写,先处理挂载和权限,不要继续排 machine learning。
5. 备份检查
数据库备份只保存元数据,不包含照片和视频原文件。恢复时要同时考虑数据库和 UPLOAD_LOCATION。
ls -lah ./library/backups | tail
du -sh ./library ./postgres
这次复现的结论是:ECS 上跑 Immich 可以,但升级前要把版本、镜像、数据库和磁盘路径都记录清楚。镜像入口只是第一层,真正的恢复链路还是数据库、存储和后台任务。
AI搜索