跳转至

Docker Compose 旧版本部署 Dify 报错


2026-10-21 by dongnan

前置说明

在 Ubuntu 20.04 系统使用 Docker Compose 方式自托管部署 Dify 的过程,重点是踩到的两个坑:

  • 一个和 Docker / Compose 版本有关——旧版 compose 不认识 Dify 编排文件里的新语法;
  • 一个和 Dify 插件依赖安装有关——插件容器里 uv 装依赖被 kill。

关于 Dify 本身的功能与开发,见更早的 《使用 Dify 开发AI应用》。


1. 环境描述

项 值
系统 Ubuntu Server 20.04 LTS
部署方式 Docker Compose
源码目录 dify/docker

官方部署文档:Self-Hosting via Docker Compose。


2. 部署步骤

克隆 Dify 源码后,进到 Docker 编排目录操作:

进入 Dify 源代码的 Docker 目录:

cd dify/docker

复制环境配置文件:

cp .env.example .env

下载镜像:

docker compose pull

启动容器:

docker compose up -d

检查是否所有容器都正常运行:

docker compose ps

docker compose up -d 会拉起 Dify 的全部服务(api、worker、web、db、redis、plugin_daemon 等)。下面两个报错就分别出现在「启动容器」和「插件运行」阶段。


3. 报错 1:compose 文件校验失败

执行 docker-compose up -d 时直接报错:

ERROR: The Compose file './docker-compose.yaml' is invalid because:
services.plugin_daemon.depends_on contains unsupported option: 'required'
services.api.depends_on contains unsupported option: 'required'
services.worker.depends_on contains unsupported option: 'required'
services.worker_beat.depends_on contains unsupported option: 'required'

原因

Dify 的 docker-compose.yaml 用了新版 compose 规范里 depends_on 的长语法,其中 required 字段(把某个依赖声明为"可选")是较新的 Docker Compose 才支持的。当前机器上装的是老版本 Docker Compose(v1.29.2,见 《使用 Dify 开发AI应用》),不认识这个字段,于是校验直接失败。

解决

卸掉旧的 docker-ce,换用 Ubuntu 源的 docker.io + docker-compose-v2:

apt remove docker-ce docker-ce-cli
apt install docker.io docker-compose-v2

验证版本:

docker info | head -n2
Client:
 Version:    26.1.3

docker compose version
Docker Compose version 2.27.1+ds1-0ubuntu1~20.04.1

Docker Compose 2.27.1 已支持 required,重新 docker compose up -d 即可。


4. 报错 2:插件依赖安装被 kill

容器/服务部署成功后,安装 千问LLM插件 plugin_daemon 时报错:

failed to launch plugin: failed to install dependencies: failed to install dependencies: signal: killed, output: DEBUG uv 0.11.7 (x86_64-unknown-linux-gnu)
...
Downloading aiohttp (1.7MiB)
...
Downloading dashscope (1.3MiB)

原因

Dify 的插件首次运行时,会在 plugin_daemon 容器里用 uv 现装 Python 依赖。依赖走的是官方 PyPI(files.pythonhosted.org),网络慢、下不完,uv 进程被杀(超时或内存不足),插件就起不来。

解决

临时办法:进容器手动用国内镜像重装依赖。

docker exec -u root -ti docker-plugin_daemon-1 /bin/bash
cd cwd/langgenius/tongyi-0.1.43@xxx
uv sync -i https://mirrors.aliyun.com/pypi/simple

还可以放宽超时,在 .env 里设置这两个变量后重建容器:

PYTHON_ENV_INIT_TIMEOUT        e.g., 320
PLUGIN_MAX_EXECUTION_TIMEOUT   e.g., 2400
  • PYTHON_ENV_INIT_TIMEOUT:插件 Python 环境初始化(装依赖)的超时时间;
  • PLUGIN_MAX_EXECUTION_TIMEOUT:插件单次执行的最大超时时间。

参考

回到页面顶部