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:插件单次执行的最大超时时间。
参考
- https://docs.dify.ai/en/self-host/quick-start/docker-compose
- https://github.com/langgenius/dify/issues/29589
- 《使用 Dify 开发AI应用》