一、备份
cd docker
# 备份配置文件
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
cp .env .env.$(date +%s).bak 2>/dev/null || true
# ⚠️ 备份 volumes 数据(Dify 所有数据都在里面:应用配置、知识库、向量库、数据库)
tar -cvf volumes-$(date +%s).tgz volumes
volumes/包含 Dify 所有持久化数据:应用配置、知识库文件、向量数据库(Weaviate)、PostgreSQL 数据、Redis 缓存、模型文件缓存。升级失败时,只有这个备份能让你完整回滚。备份文件带时间戳便于保留多个历史版本。
二、停止服务
docker compose down
三、拷贝数据卷并修复权限
如果是从旧目录迁移到新版本目录:
# 将备份的 volumes 解压到新版本目录
tar -xvf volumes-YYYYMMDD.tgz -C /path/to/new-dify/docker/
# ⚠️ 必须修改权限,否则容器内读写会遇到 permission denied
chmod 777 -R /path/to/new-dify/docker/volumes
Dify 的 Docker 容器以非 root 用户(默认
www-data或容器内固定 UID)运行,解压出来的文件属于 root,容器内进程无权写入。所有 volumes 子目录及文件都需要开放读/写/执行权限,777 -R是最直接的办法。
四、恢复原有 ENV 中的端口配置
如果旧版修改过端口,升级前需确认 .env 中以下两项已还原:
EXPOSE_NGINX_PORT=8888
EXPOSE_NGINX_SSL_PORT=8443
⚠️ 升级前务必检查
.env。新版本 Dify 的docker-compose.yaml可能已更改默认端口值(如从 80/443 改为 8888/8443),如果旧配置与新版不一致,启动后 Nginx 会报 502。
五、启动服务并执行插件升级
docker compose up -d
# 回填插件自动升级策略(1.15.0 新增)
docker compose exec api flask backfill-plugin-auto-upgrade
flask backfill-plugin-auto-upgrade是 1.15.0 新增的数据库迁移命令,用于将已有的插件注册为"自动升级"策略。首次升级必须执行,否则插件市场可能无法正常工作。
六、Sandbox 容器 Python 路径修复
升级后 Sandbox 容器可能出现以下报错:
Got error code: -500. Got error msg: fork/exec /usr/local/bin/python3: no such file or directory
修复方法:
# 创建符号链接,指向实际安装路径
docker compose exec -u root sandbox ln -sf /opt/python/bin/python3 /usr/local/bin/python3
# 验证
docker compose exec sandbox /usr/local/bin/python3 --version
💡 根因:Dify 1.15.0 的 Sandbox 镜像基于更精简的 Python 构建,
/usr/local/bin/python3不在默认$PATH里。/opt/python/bin/python3才是实际可执行路径,符号链接修复了这个路径差异。