折腾过服务器的朋友都知道,“备份与恢复”是对我们逝去的时间和劳动成果最起码的尊重。
无论是为了服务器扩容,还是为了给家里长辈部署一套完全不联网的私有相册,掌握 Docker 容器的打包、迁移、部署、验证是一项必备的 Know-how。今天我就以目前最火的开源相册 Immich 为例,带大家走一遍离线部署的全流程。

一、 核心逻辑:确认你的镜像“真身”
在打包之前,第一步必须确认你到底运行了哪些镜像。
1. GUI 与 YML 的双重确认
首先在 Docker GUI(如 Portainer 或 OrbStack)中查看运行中的容器。


2. 深度避坑:Redis 消失之谜?
在查看 docker-compose.yml 时,你可能会遇到一个超级大坑:
现象: 容器列表里明明写着
redis,但观察镜像详情时,你会发现它真正的镜像名竟然叫valkey。
为什么会这样?这是一个很有意思的技术梗:2024 年初,Redis 更改了开源协议,不再像以前那样完全“开放”。Linux 基金会为了保持纯粹的开源,基于 Redis 最后的开源版本制作了 Valkey。 Immich 团队作为开源的坚定拥护者,迅速完成了迁移。为了兼容旧配置不报错,YAML 里的服务名可能还叫 redis,但底层早已“偷梁换柱”。
二、 实战:一键打包所有镜像
确认好所有的镜像 ID 或名称后,进入你的 Immich 部署文件夹。执行以下命令,将所有核心镜像打包成一个 .tar 文件:
docker save -o immich-images-offline.tar \ ghcr.io/immich-app/immich-server:v2 \ ghcr.io/immich-app/immich-machine-learning:v2 \
1e66b73624e7 \
a8dadcaa7b3e
(注:请根据你实际查看到的镜像版本号进行替换)
打包完成后,将这个 immich-images-offline.tar 连同 .env 和 docker-compose.yml 一起拷贝到 U 盘。
三、 离线设备上的部署验证
在新设备(例如你刚配置好的离线 Mac mini)上安装好 Docker 后,开始“复活”操作:
- 环境准备: 将文件复制到硬盘,进入文件夹。 若不是克隆 最好不要复制 postgres,否则server会出现找不到文件的情况
- 修改配置: 编辑
.env文件,确保UPLOAD_LOCATION路径指向你当前的外接存储设备。 - 注意指向的文件夹要修改好权限
sudo chmod -R 777 /Volumes/SUNEAST/immichdata - yml要修改相关外接图库 volumes
- 导入镜像:
docker load -i immich-images-offline.tar - 一键启动:
docker compose up -d
四、 进阶:如何带着照片数据一起走?
如果你希望新设备打开就能看到现在的相片,而不需要重新索引,你有两个选择:
1. “克隆人”模式(推荐)
直接把现有的 NasPhoto 照片原图文件夹和 postgres 数据库文件夹完整拷贝过去。
- 要点: 只要
.env里的路径映射和旧环境完全一致,启动后所有的人物分类、地点信息都会完美继承。
2. “外部图库”模式
如果你只想把照片带走,不想要旧的数据库记录:
- 在新设备启动后,利用 Immich 的“外部图库(External Library)”功能重新扫描挂载的硬盘。
五、 💡 关键说明:离线状态下的限制
在享受离线带来的隐私安全时,有两点需要注意:
- 算力表现: 像 M4 芯片这样的端侧算力,在离线状态下运行人脸识别和 CLIP 搜索依然快得飞起。
- 地图功能: Immich 地图默认需要联网获取底图。彻底断网状态下,地图背景会显示不出来(但坐标点位还在)。
- 版本更新: 离线环境无法自动升级。建议每次备份时顺便记下当前的版本号。
结语
备份不只是为了防止硬件损坏,更是为了在技术迁移时拥有“说走就走”的底气。如果你在离线部署中遇到网络代理或权限问题,欢迎在评论区留言。