换 VPS 是家常便饭,但把跑在 Docker 里的服务平滑搬过去,很多人容易把数据弄丢。特别是在主机选这类技术博客的后台,经常有朋友问 Ollama 模型或者 n8n 的数据库怎么迁移。其实只要思路清晰,Docker 服务迁移并不难,核心在于镜像的打包、数据卷的备份以及配置文件的还原。不管是 AI Agent 还是普通的 Web 服务,只要抓住了这几项,就能在新机器上“复活”环境。

准备工作与环境检查
别急着开始操作,先确认新旧两台 VPS 的基础环境。Docker 版本差异过大可能会导致容器启动失败,尤其是在一些依赖特定特性的 AI 镜像上。
检查旧 VPS 的 Docker 版本:
docker -v
docker-compose -v
记录下版本号,确保新 VPS 安装的版本不低于旧版本。如果新 VPS 系统版本差异很大(比如从 Ubuntu 18.04 迁移到 22.04),建议先在新机器上测试一下基础网络和存储 IO。
Docker 镜像与 Compose 文件迁移
迁移不仅仅是复制文件,为了保证服务一致性,我们需要把镜像和编排文件分开处理。
导出业务镜像
直接在新 VPS pull 镜像可能会遇到网络问题,或者版本号已经更新导致不兼容。最稳妥的方法是把当前运行的镜像打包。
查看当前运行的容器:
docker ps
根据容器 ID 或名称找到对应的镜像,使用 `save` 命令打包:
docker save -o n8n-image.tar n8n:latest # 将 n8n 镜像打包
docker save -o ollama-image.tar ollama:latest # 将 ollama 镜像打包
这步操作会把镜像的所有层都打成一个 tar 包,体积可能比较大,耐心等待。
备份 docker-compose.yml
这是服务的“剧本”,记录了端口映射、环境变量和挂载路径。如果丢了,你得重新回忆所有配置。
cd /opt/services
tar -czvf config-files.tar.gz docker-compose.yml .env
千万别漏了 `.env` 文件,里面通常存着数据库密码、API Key 等敏感信息。
核心数据卷备份
这是 Docker 服务迁移中最容易出问题的地方。容器删了可以重建,数据丢了就真没了。对于 AI Agent 部署来说,数据卷里可能存着 n8n 的工作流、Ollama 下载的大模型文件或者向量数据库。
AI Agent 数据持久化处理
先确认你的数据卷挂载路径。可以通过 `docker inspect` 查看:
docker inspect n8n | grep -A 10 Mounts
假设 n8n 的数据挂载在 `/var/lib/docker/volumes/n8n_data/_data`,Ollama 的模型在 `/var/lib/docker/volumes/ollama_data/_data`。
使用 `tar` 打包这些目录:
tar -czvf n8n-data-backup.tar.gz /var/lib/docker/volumes/n8n_data/_data
tar -czvf ollama-models-backup.tar.gz /var/lib/docker/volumes/ollama_data/_data
如果模型文件很大(几十 GB),压缩会很慢且占 CPU。如果新旧 VPS 网络互通,直接用 `rsync` 同步可能更高效。
传输数据到新 VPS
使用 `scp` 或者 `rsync` 将打包好的镜像、配置文件和数据卷传到新服务器。
scp *.tar.gz root@新VPS_IP:/opt/backup/
传输过程中建议保持 SSH 连接稳定,大文件传输断了很麻烦。
新 VPS 环境搭建与服务恢复
数据到了新机器,就是还原的过程。这一步要按顺序来:先装环境,再导镜像,最后恢复数据。
导入镜像并恢复数据
先安装 Docker 和 Docker Compose(以官方仓库为准,不赘述安装步骤)。
导入之前打包的镜像:
docker load -i n8n-image.tar
docker load -i ollama-image.tar
还原配置文件和数据卷:
cd /opt
mkdir -p services
cd services
tar -xzf /opt/backup/config-files.tar.gz
tar -xzf /opt/backup/n8n-data-backup.tar.gz -C /var/lib/docker/volumes/n8n_data/_data
tar -xzf /opt/backup/ollama-models-backup.tar.gz -C /var/lib/docker/volumes/ollama_data/_data
启动服务与状态验证
一切就绪,尝试启动服务:
docker-compose up -d
别急着关掉终端,先看日志:
docker-compose logs -f
重点观察有没有报错,比如数据库连接失败、权限拒绝(Permission denied)或者端口占用。如果是 AI Agent 相关服务,确认一下模型是否正确加载,内存是否足够。
迁移后的风险点排查
服务跑起来不代表迁移结束,很多坑是在使用过程中暴露出来的。
端口与反向代理失效
如果你的旧 VPS 用了 Nginx 做反向代理,并且配置了 SSL 证书,记得把证书文件也迁移过去,并在新 VPS 的 Nginx 配置中更新 `server_name`。如果域名解析还没切过来,先用本地 hosts 文件测试新 IP 是否能正常访问。
检查防火墙和安全组,新 VPS 的默认防火墙规则可能比旧机器严格,导致 80、443 或者某些特定端口(如 n8n 的 5678)不通。
API Key 与权限问题
有些 AI 服务绑定了 API Key 的调用域名限制(比如 OpenAI 的 Key)。如果服务器 IP 变了,某些云厂商可能会校验 Referer 或 IP 白名单。如果发现服务报错 401 或 403,第一时间去控制台检查 Key 的安全设置。
另外,检查数据卷文件的属主。如果旧机器跑容器的用户 ID 和新机器不一样,可能会导致容器无权限读写数据卷。可以用 `chown` 调整一下权限,或者在 `docker-compose.yml` 里指定 `user`。
老鸟叮嘱
1.不要直接拷贝 `/var/lib/docker` 整个目录:这看起来最快,但风险极大,Docker 版本差异、网络配置冲突都可能让新机器的 Docker 起不来。
2.先停服务再打包:虽然 Docker 支持热备份,但在打包 n8n 数据库或 Ollama 模型时,最好先 `docker-compose stop`,防止数据文件写入不完整导致损坏。
3.测试连通性:迁移完成后,手动触发一次 n8n 的 Webhook 或者让 Ollama 跑一次推理,确保全链路通畅。
4.保留旧环境一周:别急着在旧 VPS 上删库跑路,万一新机器有隐藏 Bug,旧环境还能回滚救急。
FAQ
Q1:Docker 服务迁移必须要停机吗?
A:为了数据一致性,强烈建议在打包数据卷时短暂停机。对于 n8n 这种有数据库的服务,正在写入时打包 tar 包可能会导致数据库文件损坏,恢复后无法启动。
Q2:Ollama 的模型文件太大,传输太慢怎么办?
A:如果网络带宽允许,可以直接在新 VPS 上重新 `ollama pull` 模型,但这取决于 HuggingFace 等源的连接速度。如果旧新 VPS 在同一内网或服务商内部,使用内网 IP 传输会快很多。
Q3:迁移后 n8n 提示数据库连接错误怎么办?
A:检查 `.env` 文件中的数据库地址、端口和密码是否正确。如果你把数据库也放在 Docker 里,确保容器的依赖顺序正确(`depends_on`),并给数据库预留足够的启动时间。
Q4:新 VPS 的 IP 变了,需要修改 AI Agent 的配置吗?
A:这取决于你的 Agent 是否对外发送回调请求。如果是 n8n 处理 Webhook,且你绑定了新域名,需要更新 n8n 设置里的 `WEBHOOK_URL`。如果是调用外部 API(如 OpenAI),一般不需要改配置,除非 API Key 有 IP 白名单限制。
迁移完成后,记得在新 VPS 上设置好自动快照或定期备份脚本,避免下次再手忙脚乱。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/10165.html 商家投稿邮箱:zhujixuanblog@qq.com
