插件安装失败,陷入无限循环,如何让安装停下来?

这两位的情况其实已经把线索给得很全了,我帮你们汇总一下“怎么刹车 + 怎么清理 + 怎么避免再次卡死”,都针对 1.11.4。


一、你们现在遇到的现象是什么情况?

从 Niklaus1028 的日志看,大致是:

  • 不断轮询 /plugin/<plugin-id>/management/install/tasks/dispatch/model/schema 等接口;
  • 中间出现:
    • task xxx timed out
    • record not foundSELECT * FROM "plugin_declarations" WHERE plugin_unique_identifier = 'alipay/alipay_plugin:0.1.0@...'

结合 ao_zhang 的描述:

  • UI 一直显示「正在安装插件」;
  • 后台任务 Task timed out but not properly terminated
  • 同一个插件(通义 / 支付宝等)被重复创建安装任务。

这说明:

  1. 某个安装任务已经超时,但状态没有被正确标记为“结束”,导致守护进程一直认为它在安装中;
  2. 有些插件的 plugin_unique_identifier 在 DB 中查询不到(record not found),但安装流程又在继续调度,进一步把状态搞乱。

二、先“刹车”——别让守护进程继续刷任务

在你们的服务器上先停一下插件守护进程容器:

docker stop docker-plugin_daemon-1

作用:

  • 立刻停止继续创建新的安装任务、停止继续刷 Task timed out...
  • 方便你之后做清理(不然刚清完,又被新任务刷一遍)。

清理完后再启动:

docker start docker-plugin_daemon-1

三、怎么在本地部署环境拿到 Authorization(Bearer Token)

你们都是 1.11.4 的 docker-compose 自托管,即便是本地,前端访问后端也会自动带上一个 Bearer Token,只是平时看不到而已。

步骤(以 Chrome/Edge 为例):

  1. 在浏览器访问你的 Dify 管理端(例如 http://服务器IPhttp://localhost),正常登录管理员账号。
  2. F12 打开开发者工具 → 切到「Network / 网络」面板。
  3. 在页面里随便点一下别的菜单(例如进入「应用」「数据集」等),确保有接口请求被发出。
  4. 在 Network 列表里,找一个路径类似 /console/api/... 的请求,点进去。
  5. 在「Headers / 请求头」里找到:
    Authorization: Bearer xxxxxxxx...
    
  6. Bearer 后面那一长串 token 复制出来(只留给自己用,别发到论坛)。

有了这个 token,就可以在服务器上用 curl 去调用清理接口,而不需要“云端特有”的 Authorization。


四、清理“卡住的安装任务”

在之前那篇「插件安装失败后,界面上永远显示 1 个插件安装中」的帖子里,已经有一个专门的「清理安装任务状态」的 POST 接口和 body 模板,你可以按那里的说明来。

调用方式的通用写法如下(把路径和 body 换成那篇帖子里给的实际内容):

curl -X POST "http://<你的后端地址>/<那篇帖子里的接口路径>" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <上一步复制的token>" \
  -d '{
    ... 这里填那篇帖子里的 JSON body ...
  }'

注意:

  • <你的后端地址>
    • 如果你用官方的 docker 目录直接起的,一般 Nginx 把前端和后端都暴露在 80 端口,你可以直接用 http://<服务器IP> 或你现在能访问 Dify 的那个地址;
    • 如果你有自定义反向代理,请用你前端正常访问 Dify 的域名/端口。
  • 路径、请求体请完全按那篇老帖子给的来,不要自己猜,以免误删其它插件或任务状态。

调用成功后:

  • 刷新一下 Dify 页面,
    • 右上角「正在安装插件」的提示应该会消失;
    • 那个卡住的插件应变为「未安装」或者失败状态。

五、如果清理后仍然任何插件都超时,该往哪个方向排查?

你们都是 1.11.4,而且:

  • 本地安装(上传 difypkg)也超时;
  • 市场安装也超时;
  • 日志中连续 timeoutrecord not found

这通常说明不是单个插件的问题,而是插件运行环境本身不正常。几个重点方向:

1. 机器性能和 Docker 资源

插件安装会在插件容器里创建 Python 虚拟环境、下依赖,如果机器很“紧”:

  • CPU/内存不足;
  • Docker 给的资源太小;

都可能导致任务跑得很慢甚至超时。对应操作:

  • 确认机器至少有:
    • 2 核 CPU、4G+ 内存(官方最低要求建议 8G 更稳);
  • 在 Docker Desktop(如果是 Mac/Win)里适当调高 CPU / Memory;
  • 服务器上用 top/htop 观察安装时 CPU / MEM 是否打满。

2. 插件容器里访问外网 / Python 源是否通畅

从别的插件帖子来看,1.11.x 版本里很多安装失败都是因为:

  • 默认 PyPI 源连不上或非常慢;
  • 网络策略或代理挡住了插件容器访问外网。

排查:

  1. 进入插件 daemon 容器:
    docker exec -it docker-plugin_daemon-1 /bin/bash
    
  2. 在容器里试一下:
    ping pypi.org
    curl -I https://pypi.org/simple
    
    如果完全不通、或延迟极高,安装时就很容易超时。

可以考虑:

  • .env 里为插件设置国内 Python 源(如果官方在你版本支持);
  • 或在宿主机层面配置网络代理,确保容器能正常访问外网。

3. record not found 说明什么?

你日志里类似:

SELECT * FROM "plugin_declarations" WHERE plugin_unique_identifier = 'alipay/alipay_plugin:0.1.0@...' ... record not found

这说明:

  • 插件声明没有写入数据库成功;
  • 但安装流程后续步骤还在根据这个 plugin_unique_identifier 去查,得不到记录。

在你用 API 清理安装任务后:

  • 建议重新打开插件市场/插件管理页;
  • 为避免叠加旧垃圾状态,先只装一个简单插件测试(例如自带的官方演示插件):
    • 如果简单插件也超时,那就是“环境级问题”;
    • 如果简单插件 OK,而某几个特定插件失败,就集中看这些插件的依赖和网络。

六、如果 API 清理还是搞不定,只剩下“重置状态”两条路(风险高)

只在你确认数据可备份、且对数据库操作有经验时考虑:

  1. 整栈停机 + 备份数据库

    docker compose down
    

    假设 Postgres 容器叫 docker-db_postgres-1,备份:

    docker exec -t docker-db_postgres-1 \
      pg_dump -U <db_user> <db_name> > dify_backup.sql
    
  2. 进入数据库,把插件相关的“安装任务”和“安装中状态”删掉或改为失败。
    这一步不同版本表名/字段略有差异,不建议你自己猜字段名,非常容易把别的东西删错。
    如果一定要走这条路,建议你单独开一贴或在这里补充:

    • docker-compose.yml 里 Dify 版本和 Postgres 相关配置;
    • \dt 看一下插件相关表的名字和结构截图;
      然后再一起推敲具体 SQL。

七、下一步你们可以这样继续反馈,方便精确定位

建议两位分别补充这些信息到本帖:

  1. 执行:

    docker logs docker-plugin_daemon-1 -n 200
    

    把包含 Task timed out but not properly terminatedrecord not found 的那几段日志,打码后贴上来。

  2. 按上面的步骤拿到 Authorization: Bearer ...,尝试一次“清理安装任务”的 POST 调用:

    • 调用用的是哪一个接口路径?
    • 返回的 HTTP 状态码是多少(200 / 4xx / 5xx)?
    • 调用后刷新 UI,“正在安装插件”的提示是否消失?
  3. 清理后,再尝试安装一个最简单的插件,看是否仍然统一报 Task timed out but not properly terminated

只要我们能确认:

  • 清理接口能正常把卡住的任务“归零”;
  • 但新安装仍然超时;

那就基本可以判断是“环境/网络/资源”问题,而不是单纯的一次性脏数据,后面就可以针对性给环境优化的指导,或者建议考虑升级到较新版本(后续版本在插件安装超时与任务清理方面确实有持续修复)。


:books: 相关文档

如果你们方便的话,可以先按上面的“刹车 + 拿 token + 调清理接口”这三步来走一遍,然后回帖说下执行结果,我们再一起把根因缩小到“环境问题还是版本 bug”。