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