1. 首页 > 技术教程 > 正文

Docker 服务迁移到新 VPS 怎么做?AI Agent 输出迁移步骤和风险点

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

zhujixuan TASK 227

准备工作与环境检查

别急着开始操作,先确认新旧两台 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