破坏性更新Docker版本的Dify

发布于 2025年01月14日

前提

首先,你之前就已经用docker部署了一次,但是不知道如何更新。

注意

如果你进行了二次开发,那么就不要看这个文章,因为是直接强制合并的。

该教程是破坏性更新

请在执行下面步骤前,把所有的工作流导出并且保存好
请在执行下面步骤前,把所有的工作流导出并且保存好
请在执行下面步骤前,把所有的工作流导出并且保存好

更新代码

# 切换到指定目录
cd dify-main/
# 尝试拉取代码
git pull

然后就惊讶发现,根本无法拉取代码,提示如下:

(base) rtxa4500@rtxa4500:~/dify-main$ git pull
remote: Enumerating objects: 2884, done.
remote: Counting objects: 100% (1552/1552), done.
remote: Compressing objects: 100% (98/98), done.
remote: Total 2884 (delta 1502), reused 1455 (delta 1453), pack-reused 1332 (from 2)
Receiving objects: 100% (2884/2884), 1.45 MiB | 1.01 MiB/s, done.
Resolving deltas: 100% (1999/1999), completed with 453 local objects.
From https://github.com/langgenius/dify
   4295cefeb..6e0fb055d  main                            -> origin/main
   f0f34971f..a046548f9  deploy/dev                      -> origin/deploy/dev
   86318d913..8865bdca0  dev/plugin-deploy               -> origin/dev/plugin-deploy
 * [new branch]          feat/chunk-length-support-env   -> origin/feat/chunk-length-support-env
 * [new branch]          feat/knowledge-dark-mode        -> origin/feat/knowledge-dark-mode
 * [new branch]          feat/workflow-node-dark-mode    -> origin/feat/workflow-node-dark-mode
   4f0ecdbb6..a697bbdfa  fix/adjust-price-frontend       -> origin/fix/adjust-price-frontend
   b56d2b739..4b5586375  fix/chore-fix                   -> origin/fix/chore-fix
 * [new branch]          fix/not-show-strategy-type      -> origin/fix/not-show-strategy-type
 * [new branch]          fix/switch-strategy-clean-param -> origin/fix/switch-strategy-clean-param
 * [new branch]          opik-monitoring                 -> origin/opik-monitoring
 * [new branch]          plugins/beta                    -> origin/plugins/beta
 * [new tag]             0.15.1                          -> 0.15.1
 * [new tag]             1.0.0-beta.1                    -> 1.0.0-beta.1
Updating 4295cefeb..6e0fb055d
error: Your local changes to the following files would be overwritten by merge:
        api/configs/packaging/__init__.py
        api/controllers/service_api/wraps.py
        api/core/model_runtime/model_providers/__base/tokenizers/gpt2_tokenzier.py
        api/core/model_runtime/model_providers/openai_api_compatible/llm/llm.py
        api/core/workflow/nodes/document_extractor/node.py
        api/services/dataset_service.py
        docker-legacy/docker-compose.yaml
        docker/.env.example
        docker/docker-compose-template.yaml
        docker/docker-compose.yaml
        web/package.json
Please commit your changes or stash them before you merge.
Aborting

这段代码的意思是:请在合并之前提交你的更改或暂存它们。

出现这种情况,就说因为你使用docker部署的时候,自动更新了一些文件,所以会导致你拉取新代码的时候,提示你本地有代码更改了。

解决办法

备份原来的docker compose.yaml文件,先切换到docker目录

cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak

停止服务,请在 docker 目录下执行命令

sudo docker compose down

备份数据

sudo tar -cvf volumes-$(date +%s).tgz volumes

切换到根目录,执行

git fetch origin
git reset --hard @{u}
git pull --force

提示:

(base) rtxa4500@rtxa4500:~/dify-main$ git pull --force
Already up to date.

那么恭喜你,代码已经拉取成功了。

开始导入旧版本数据,并运行

切换到docker目录

cd docker

如果之前也执行了docker升级,一定要先删除目录下的docker-compose.yaml.1736784002.bak文件

使用 ls 查看目录

(base) rtxa4500@rtxa4500:~/dify-main/docker$ ls
certbot
docker-compose.png
docker-compose.yaml.1736295810.bak
generate_docker_compose
nginx
startupscripts
couchbase-server
docker-compose-template.yaml
docker-compose.yaml.1736784002.bak   #### docker-compose的备份文件,上次版本的启动配置中这里,如果你配置了启动端口,那么就在这里还原
middleware.env
README.md
volumes                 #### docker的卷数据
docker-compose.middleware.yaml
docker-compose.yaml
elasticsearch
middleware.env.example
ssrf_proxy
volumes-1736784053.tgz #### 刚刚的备份文件

由于我修改了容器的80端口和443,那么我需要对文件:docker-compose.yaml 如下修改:

${EXPOSE_NGINX_PORT:-80}:${NGINX_PORT:-80}

改成

${EXPOSE_NGINX_PORT:-81}:${NGINX_PORT:-80}

容器的443端口:

${EXPOSE_NGINX_SSL_PORT:-443}:${NGINX_SSL_PORT:-443}

改成

${EXPOSE_NGINX_SSL_PORT:-8443}:${NGINX_SSL_PORT:-443}

启动容器

sudo docker compose up -d


评论