宝塔面板博客官方技术博客
宝塔面板

宝塔 Docker 装的 Dify 怎么升级不丢数据?保留数据卷从低版本迁移到新版本

宝塔 Docker 应用商店里装的 Dify 想升级,又怕一升级数据全没了。其实迁移的关键只有一步:把旧版本的 volumes 数据卷复制到新版本目录。下面以 Dify 从 1.1.0 升级到 1.1.3 为例,讲清完整步骤和几个容易踩的坑。

Dify 低版本迁移版本说明

迁移前先做三件事

动任何容器之前,先把前置条件备好:

  • 备份旧版本容器及数据卷:迁移前先备份,避免误操作导致数据丢失,建议在面板内或命令行执行备份。
  • 新版本端口不冲突:安装新版本时端口不要冲突,保持与旧版本不同的暴露端口。
  • 装完先别访问 Web 界面:安装完成后先不要访问 Web 界面,确保容器日志正常且无报错再做后续操作。

迁移步骤:从 1.1.0 升到 1.1.3

第一步:备份旧版本容器

操作前先备份旧版本容器(建议在面板内或命令行执行备份),这一步是防止迁移中途出错后无法回退。

第二步:从应用商店拉取新版本

从商店中拉取新版本 Dify(示例是从 1.1.0 升级至 1.1.3)。注意端口不要冲突,安装完成日志没有报错就行;此时不要访问 Web 界面,日志正常、容器正常即可。

第三步:手动停止新版本容器

复制数据卷前,先把新版本 Dify 容器停止,保证复制时目标容器未占用数据卷。

停止新版本容器

第四步:复制旧版本 volumes 数据卷

这是迁移最关键的一步。停止新版本容器后,进入终端执行数据迁移命令,把旧版本的 volumes 目录复制到新版本的 volumes 目录:

# 命令格式为
# \cp -r 旧版本 Dify 目录/volumes  新版本 Dify 目录/
# 要替换成你自己的命令,注意命令前的 \ 不能少
\cp -r /www/dk_project/dk_app/dify_v190/dify_v190_HGHK/volumes \
      /www/dk_project/dk_app/dify_v1100/dify_v1100_DFTk/

复制数据卷是决定是否保留数据的关键操作,务必注意四点:新版本容器必须处于停止状态;命令前的反斜杠 \ 不能少(避免被 shell 别名替换 cp);路径为示例,要替换成你的实际安装路径、以容器挂载的 volumes 目录为准;数据量大或权限复杂时,建议用 \cp -a 或 rsync -a 保留权限与符号链接。

复制完成后,比较两个 volumes 目录的文件数与大小是否一致;如遇权限异常,尝试 \cp -a 或 rsync -a 重新复制。

第五步:启动新容器并验证

复制完成后,启动新版本 Dify 容器,访问新版本的预设端口,确认数据与配置和旧版本一致,即迁移成功。

访问新版本预设端口验证迁移成功

常见问题

  • 安装或拉取镜像失败:可尝试给 Docker 配置镜像加速站(见宝塔论坛 Docker 镜像加速站配置教程)。
  • 新版本容器启动后:不要立即访问 Web,先观察日志是否正常。
  • 云服务器放行端口:面板里勾选「允许外部访问」只穿过系统防火墙,仍需在云厂商安全组开放对应端口。

本文操作步骤以宝塔官方文档《Dify 应用低版本迁移帮助》为准。

常见问题

Dify 升级迁移的核心是做什么?

核心是复制旧版本的 volumes 数据卷到新版本目录,让新版本容器继续使用原来的数据。操作顺序是:备份旧容器 → 从商店拉新版本 → 停止新版本容器 → 复制 volumes 目录 → 启动新容器 → 访问验证。

迁移前一定要备份吗?

要。官方教程明确要求迁移前先备份旧版本容器及其数据卷,避免误操作导致数据丢失,建议在面板内或命令行执行备份。

新版本和旧版本能用同一个端口吗?

不能。安装新版本时端口不要冲突,保持与旧版本不同的暴露端口;端口冲突会导致新版本无法正常启动。

复制数据卷时要注意什么?

新版本容器必须处于停止状态再复制,避免数据卷被占用;复制命令前的反斜杠 `\` 不能省略(防止被 shell 别名替换 cp);路径要替换成自己的实际安装路径,以容器挂载的 volumes 目录为准。

复制完怎么确认迁移成功?

先比较新旧两个 volumes 目录的文件数与大小是否一致;如遇权限异常用 `\cp -a` 或 `rsync -a` 重新复制。启动新版本容器后,访问新版本的预设端口,确认数据与配置和旧版本一致即迁移成功。

安装或拉取镜像失败怎么办?

可尝试给 Docker 配置镜像加速站;此外云服务器务必在安全组开放对应端口——面板里勾选「允许外部访问」只穿过系统防火墙,仍需放行安全组。